Mam ogromną sortowaną listę z liczbami całkowitymi - Hugelist.

Muszę utworzyć nową listę elementów na podstawie wejścia:

Zapytanie Hugelist Próbuje znaleźć wszystkie serie liczb całkowitych pasujących do mojego wejścia (zmienne wejście, takie jak: 5,6,4,9 (idealna dynamiczna liczba wejść). Numery muszą być kolejno w Hugelist.

Potrzebujesz wszystkich dopasowanych danych (5,6,4,9, a następne 7 elementów w Hugelist) dodano do nowej listy.

Skończę więc z listą dopasowań w filtrowaniu

Jak na ziemi robię to z Linq i nie foreach mojej drogi?

hugelist.OrderBy (l => l.Date)
.GroupBy (l => new { l.ID, l.City })
.ToList()
.ForEach(g => g.Aggregate (0, (acc, m)  => { m.DiffToPrev = m.Value - acc; return m.Value; }));

Difftoprev jest tym, co chciałbym zapytać z wieloma wejściami (ints).

-1
mch_dk 15 kwiecień 2021, 15:24

1 odpowiedź

Najlepsza odpowiedź

Możesz to zrobić w ten sposób:

    List<int> input = new List<int> { 0, 0, 0, 0, 5,6,4,9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    
    List<int> search = new List<int> { 5,6,4,9 };
    
    var test = Enumerable.Range(0, input.Count - search.Count)
                         .Where(x => input.Skip(x)
                                          .Take(search.Count)
                                          .SequenceEqual(search)
                               )
                         .Select(x => input.Skip(x)
                                           .Take(search.Count+7)
                                ).SelectMany(x => x);

Ale w rzeczywistości nie zrobiłbym tego z Linq, ale z pętlą, ponieważ będziesz iterować dość często na liście i nie jest łatwo czytelny.

Demo online: https://dotnetFiddle.net/1ngzff

0
Mong Zhu 15 kwiecień 2021, 13:23