当所有项目都相同时,从List <int>获取项目的索引?

时间:2018-08-30 08:47:05

标签: c# list loops foreach

我正在为自己的目的而努力。

我的场景看起来像这样:

我有一个列表,看起来像这样(只有两个值255和0):

List<int> list = new List<int>(){ 255, 0, 0, 255, 0, 255, 255, 0, 255 };

还有一个循环:

foreach(var item in list)
{
      if(item == 255)
      {
           counter++; //its simple 'int' varialbe 
           summary += secondList.Contains(item); //its second list with ints
      }
}

我的secondList如下:

static List<int> secondList= new List<int>(){ 128, 1,  2, 64,  0,  4, 32,  16, 8 };

我想做的是根据item的索引为secondList中的相同位置添加值。

如果项的索引== 1,我也想将secondList设置为位置“ 1”,并将其值添加到summary变量中。

据我所知,Contains将以item的形式返回第一项,但是就像您看到的那样,在list中,我仅存储两个值255和0。

是否可以正确获取item循环中foreach的索引?

3 个答案:

答案 0 :(得分:0)

要么声明一个将保留索引的变量,要么使用foor循环:

int idx = 0;
foreach(var item in list)
{
      if(item == 255)
      {
           counter++; //its simple 'int' varialbe 
           summary += secondList[idx];
      }

    idx++;
}

答案 1 :(得分:0)

最简单的解决方案是使用for循环。

int counter = 0;
int summary = 0;

List<int> list = new List<int>() { 255, 0, 0, 255, 0, 255, 255, 0, 255 };
List<int> secondList = new List<int>() { 128, 1, 2, 64, 0, 4, 32, 16, 8 };

for (int i = 0; i < list.Count; i++)
{
    if (list[i] == 255)
    {
        counter++; //its simple 'int' varialbe 
        summary += secondList[i]; //its second list with ints
    }
}

答案 2 :(得分:0)

您还可以使用更实用的方法,例如

List<int> list = new List<int>(){ 255, 0, 0, 255, 0, 255, 255, 0, 255 };
List<int> secondList= new List<int>(){ 128, 1,  2, 64,  0,  4, 32,  16, 8 };

var matches = list.Zip(secondList, Tuple.Create)
                  .Where(t => t.Item1 == 255)
                  .Select(t => t.Item2);

Console.WriteLine(matches.Count());
Console.WriteLine(matches.Sum());

输出:

  

5
  236