IList<int> numbers = new List<int> {1, 2, 3, 4, 5, 6, 7};
var grouped = numbers.GroupBy(num =>
{
if (numbers.IndexOf(num) % 2 == 0)
{
return numbers.IndexOf(num) + 1;
}
return numbers.IndexOf(num);
});
Jeśli potrzebujesz ostatnią parę wypełnione zera można po prostu dodać go przed wykonaniem grupowanie if lista jest nieparzysta.
if (numbers.Count() % 2 == 1)
{
numbers.Add(0);
}
Innym rozwiązaniem mogłoby być:
var groupedIt = numbers
.Zip(numbers.Skip(1).Concat(new[]{0}), Tuple.Create)
.Where((x,i) => i % 2 == 0);
Albo użyć MoreLinq że ma wiele przydatnych rozszerzeń:
IList<int> numbers = new List<int> {1, 2, 3, 4, 5, 6, 7};
var batched = numbers.Batch(2);
dokładną kopią pytanie zadane przez siebie http: // stackoverflow.com/questions/3575925/linq-to-return-all-pairs of-elements-from-two-lists –
@Jani Nie, nie jest. Prosi o odpowiednik metody Zip() Pythona (lub Rubiego) -> bierze dwie listy i tworzy jedną listę krotek. To pytanie dotyczy partycjonowania pojedynczej listy. –
@Cristi ma, przepraszam –