在Visual Studio中,使用C#,我得到了三个类似于以下内容的数组:
int[] price = new int[] { 100, 200, 300, 400, 500, 600 };
string[] goods = new string[] { "item1", "item2", "item3", "item4", "item5", "item6" };
bool[] cart = new bool[] { false, false, false, false, false, false };
布尔购物车表示复选框。现在我想做的是,使用一个按钮,检查勾选了哪些框,然后从数组商品中获取商品的名称,并从数组价格中获取商品的价格。然后,我将连接字符串,并将总和相加,然后将其显示在MessageBox中。显示。
我想我需要以某种方式将cart数组的索引与price和goods数组的相应索引联系起来。还是有更好的方法?可能是for循环,但如何实现?我不知道从哪里开始。非常感谢您的帮助!
您可以尝试的一件事是使用属性Name
、Price
、Cart
等使类Good
public class Good
{
public string Name { get; set; }
public int Price { get; set; }
public bool Cart { get; set;}
}
然后把它们放在一个列表中。
List<Good> MyGoods = new List<Good>();
MyGoods.Add(new Good{ Name="item1", Price=100, Cart = false});
您可以向该列表添加任意数量的项,然后使用索引或foreach
for(int i=0; i<MyGoods.Count;i++)
{
Console.WriteLine(MyGoods[i].Name);
}
或者
foreach(Good g in MyGoods)
{
Console.WriteLine(g.Name);
}
这是绑定问题的一个简单示例。
我假设您的每个项目都有一个复选框,当它的状态更改时,bool[]购物车会在正确的索引处更改。
然后你只需要保存这个指数,并像这样把正确的价格和项目加起来:
string shoppingCart += goods[i];
decimal cost += price [i];
但是,这是一个很大的问题,你不应该依赖这么多基于索引的数组。
正如icebat在他的评论中提到的,你应该实现一个代表你的项目的类。
示例:
public class Item
{
public int Id { get; set; }
public decimal Price { get; set; }
public string Name { get; set; }
}
有更好的方法吗?
像这样的匹配数组是一种反模式,这表明您应该真正创建一个具有price、good和cart属性的类。然后你可以有一个数组,你可以循环一次。
但即使使用这种反模式,您仍然可以做您需要的事情:
var items = cart.Zip(goods, (c,g) => new {Cart = c, Good = g}).Zip(price, (a, p) => new {Cart = a.Cart, Good = a.Good, Price = p});
var ticked = items.Where(i => i.Cart);
var message = string.Join(",", ticked.Select(t => t.Good));
var sum = ticked.Select(t => t.Price).Sum();
MessageBox.Show($"{message}\nTotal: {sum}");
这也会起作用,可能意味着更少的内存使用:
var ticked = cart.Select((value,index) => new {Cart = value, Price = price[index], Good = goods[index]})
.Where(i => i.Cart);
var message = string.Join(",", ticked.Select(s => s.Good));
var sum = ticked.Select(s => s.Price).Sum();
MessageBox.Show($"{message}\nTotal: {sum}");
您还可以使用索引:
int sum = 0;
var message = new StringBuilder();
var delimiter = "";
for(int i = 0; i<cart.Length; i++)
{
if (cart[i])
{
sum += price[i];
message.Append(delimiter).Append(goods[i]);
delimiter = ",";
}
}
MessageBox.Show($"{message}\nTotal: {sum}");
在这种情况下,索引选项可能会更快,并且不会更难理解linq选项(尽管通常情况下是相反的),即使它的代码更多。
问题内容: 我正在尝试遍历以下内容 我到目前为止所得到的: 有任何想法吗? 问题答案: 在您的代码中,元素是JSON对象的数组,而不是JSON对象本身。元件,和是JSON的一部分内部对象JSON阵列。 您需要遍历数组 版画 我不知道您的代码片段来自何处。
问题内容: 我有一个具有1 2 3 4 5值的数组。 现在我想以循环方式遍历它。像我想打印2 3 4 5 1或3 4 5 1 2或5 1 2 3 4等等。有什么 算法 吗? 编辑: 我想以循环方式打印所有组合。我不想在初始阶段说明起点。 问题答案: (如果要从向下迭代数组,请在数组下标表达式中更改为。) 我应该注意,就执行速度而言,这可能不是表达循环的最有效方法。但是,差异很小,并且 很可能无关紧
问题内容: 我需要遍历一个post数组并对其求和。 但是我不知道从哪里开始。 问题答案: 这是您的操作方式: 这会照顾传入的变量和数组。
问题内容: 我正在尝试将使用OpenCV收到的先前答案中的C++方法转换为使用OpenCV Java绑定的Java C ++代码: 我不知道如何像在C代码中那样遍历变量。以下是到目前为止我得到的: Java代码: 我经历了API,似乎确实有获取方法,但是我什么也不能调用。 问题答案: 如果确实是 灰色 ,则可能是以下类型: 我没有设置环境来测试此代码。有关更多信息,请检查此线程。 如果您使用的是
问题内容: 我试图遍历一个json文件的对象数组以访问其变量的键和值,并使用jquery的getjson及其每个将它们附加到列表项。 我认为该解决方案应该与本文中的解决方案类似…但是我似乎无法使其完全发挥作用并显示结果…非常感谢您的帮助! json数据的格式如下: 并且html的格式应如下所示: 问题答案: 您要替换为空白数组,从而在运行时破坏数据。删除此行,它应该工作。 编辑 :您的代码中还有一
问题内容: 我想知道是否有人可以帮助我创建一个while循环来遍历几个数据库,以便从两列的一个表中获取数据。这是我到目前为止所做的。什么都行不通,因为我不知道如何针对我从每个数据库查询的表来使select语句在每个数据库中正常工作(dbo.tbldoc) 问题答案: 我会考虑使用sp_MSForEachDB,这要容易得多… 编辑: