我正在为自己的目的而努力。
我的场景看起来像这样:
我有一个列表,看起来像这样(只有两个值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
的索引?
答案 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