Найти все элементы из индекса по модулю X с конкретным значением в linq - PullRequest
1 голос
/ 29 октября 2011

Как я могу изменить свой метод, чтобы проверять только те индексы, которые равны нулю, а по модулю 17? Я хотел бы получить из этих индексов все элементы, которые равны и нулю.

My List<byte[]> listOfArrays хранит массивы со значениями 0,1

Это мой метод:

public List<int> Funct(List<byte[]> listOfArrays)
        {
            List<int> pixelsList = new List<int>();
            foreach (byte[] t in listOfArrays)
            {
                //count how many items with value 0
                var pixelsInArray = t.Count(n => n == 0);

                var firstElement = Array.FindIndex(t, i => i == 0);
                var lastElement = Array.FindLastIndex(t, i => i == 0);

                pixelsList.Add(pixelsInArray);
            }
            return pixelsList;
        }

В этом методе я ищу по всем индексам.

Буду признателен за вашу помощь.
PS. Пожалуйста, проверьте мою грамматику, если нужно исправить.

1 Ответ

1 голос
/ 29 октября 2011

это должно сработать, если я правильно понимаю:

  public List<int> Funct(List<byte[]> listOfArrays)
  {
     List<int> pixelsList = new List<int>();
     foreach (byte[] t in listOfArrays)
     {
        int counter = 0;
        t.ForEachWithIndex((value, index) =>
                              {
                                 if (value == 0 && index % 17 == 0)
                                 {
                                  // your values
                                  counter++;                                      
                                 }
                              }); 

       pixelsList.Add(counter);
     }

     return pixelsList;
  }

Расширение найдено в: Как вы получаете индекс текущей итерации цикла foreach?

namespace MyExtensions
{
   public static class ForEachExtensions
   {
      public static void ForEachWithIndex<T>(this IEnumerable<T> enumerable, Action<T, int> handler)
      {
         int idx = 0;
         foreach (T item in enumerable)
            handler(item, idx++);
      }
   }
}
...