Jeśli mam listę zawierającą dowolną liczbę list, tak jak poniżej:Jak "zip" lub "obrócić" zmienną liczbę list?
var myList = new List<List<string>>()
{
new List<string>() { "a", "b", "c", "d" },
new List<string>() { "1", "2", "3", "4" },
new List<string>() { "w", "x", "y", "z" },
// ...etc...
};
... czy jest jakiś sposób aby jakoś „zip” lub „Rotate” Listy do czegoś takiego?
{
{ "a", "1", "w", ... },
{ "b", "2", "x", ... },
{ "c", "3", "y", ... },
{ "d", "4", "z", ... }
}
Oczywistym rozwiązaniem byłoby zrobić coś takiego:
public static IEnumerable<IEnumerable<T>> Rotate<T>(this IEnumerable<IEnumerable<T>> list)
{
for (int i = 0; i < list.Min(x => x.Count()); i++)
{
yield return list.Select(x => x.ElementAt(i));
}
}
// snip
var newList = myList.Rotate();
... ale zastanawiałem się, czy nie było czystsze sposób robić to za pomocą LINQ lub w inny sposób?
Dlaczego chcesz rozwiązać ten problem, używając LINQ? –
@ Moo-Juice - dobra rada, zredagowałem mój tytuł. Myślę, że po prostu automatycznie założyłem, że rozwiązanie użyje linq w jakiś sposób, ale przypuszczam, że niekoniecznie tak jest. – Michael0x2a
Twój przykładowy kod jest bardzo nieefektywny, jeśli sekwencje nie są losowym dostępem. –