Получить индекс элемента из списка <int>, когда все элементы одинаковы? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь сделать 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 голосов
/ 30 августа 2018

Самое простое решение - использовать петлю 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
    }
}
0 голосов
/ 30 августа 2018

Вы также можете использовать более функциональный подход, например

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

0 голосов
/ 30 августа 2018

Либо объявите переменную, которая будет содержать индекс, либо используйте вместо этого цикл foor:

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

    idx++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...