当前位置: 首页 > 知识库问答 >
问题:

循环遍历数组,将值相互绑定

越国源
2023-03-14

在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循环,但如何实现?我不知道从哪里开始。非常感谢您的帮助!

共有3个答案

羊舌承颜
2023-03-14

您可以尝试的一件事是使用属性NamePriceCart等使类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);
}
阎麒
2023-03-14

这是绑定问题的一个简单示例。

我假设您的每个项目都有一个复选框,当它的状态更改时,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; }
}
轩辕越泽
2023-03-14

有更好的方法吗?

像这样的匹配数组是一种反模式,这表明您应该真正创建一个具有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,这要容易得多… 编辑: