Детский вопрос по LINQ
От: SergASh  
Дата: 04.10.08 12:10
Оценка:
Привет всем!

Есть две последовательности одинаковой длины. Как для них построить соединение, которое бы соотносило элементы с одинаковыми индексами?

То есть на входе { 1, 2, 3 }, { "ein", "zwei", "drei" }. А на выходе { { 1, "ein" }, { 2, "zwei" }, { 3, "drei" } }.

Интересует человеческий вариант на LINQ-операторах, а не это убожество, приведенное ниже.
var digits = new[] { 1, 2, 3 };
var german = new[] { "ein", "zwei", "drei" };

var q = digits.Select( ( digit, index ) => new { Value = digit, Index = index } )
              .Join( german.Select( ( phrase, index ) => new { Value = phrase, Index = index } ),
                     _ => _.Index, _ => _.Index, // Вот это очень плохо читается; с первого взгляда не очевидно, что именно тут индексы на равенство и сравниваются.
                     ( digit, phrase ) => new { Digit = digit.Value, Phrase = phrase.Value }
                    );
foreach ( var translation in q )
  Console.WriteLine( "'{0}' stands for {1}", translation.Phrase, translation.Digit );

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.