Чому немає реалізації LINQ для array [,]

тобто для одновимірних масивів є, для jagged масивів є, а для n-вимірних немає?

чому?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Це — неважливо.

Мда... Звезда в шоке!

2 аноним
дякую вам!
Тепер мені все ясно.

мене збило з пантелику те, що для jagged і для звичайних масивів Intellisense пропонує багато extension methods, а для multidimension — ні. Після чого я помилково подумав, що і LINQ до тих масивів не можна писати. А насправді то причина то в тому, що перші реалізовують IEnumarable< T> (для яких визначені ті всі extension methods), а multidimension лише IEnumarable. LINQ же ж працює для всіх випадків.

Если нет, то напишите, благо C# позволяет дописывать код для «чужих» классов.

Jagged-массивы:

int[][] a = new int[][]
                            {
                                new int[] {1, 2},
                                new int[] {3, 4},
                                new int[] {5, 6}
                            };
            var s = (from int[] t in a
                     select t).ToList();

А почему из обычного массива нельзя напрямую создать множество массивов n-1 размерности, так вы и без учета LINQ без своего кода этого не сделаете.

Кто сказал, что не можете?

int[,] a = new int[3,2]
                           {
                               {1, 2},
                               {3, 4},
                               {5, 6}
                           };
            var s = (from int t in a
                     select t).ToList();


Что должен вернуть запрос к многомерному массиву?

Це — неважливо. Мені важливо знати саме причину, чому я не можу застосувати LINQ до обєкта, який вже реалізовує IEnumarable.

Насколько я понимаю, класс System.Array реализует только не-generic интерфейс System.Collections.IList, поскольку присутствовал в.Net с самого начала. Соответственно, информацию о типе нужно добавлять явно. Я не проводил экспериментов, но поскольку многомерные массивы в.Net это не массивы массивов, а всё равно один объект Array с Rank больше 1, то я бы ожидал, что LINQ-запрос выполним только над типом заданным как элемент массива.

Подозреваю, что множество N-1-мерных массивов.

array вже реалізовує IEnumarable, чому ми не можемо тоді написати LINQ-запит?

Я не большой специалист по дотНет, поэтому вопрос: Что должен вернуть запрос к многомерному массиву?

2 denis.gz
дякую вам!
Тепер як застосувати LINQ to Array [,] стало ясно, але питання принципу роботи ще залишилося:
От маємо ми string [,] array = new string [3, 4] {...};
array вже реалізовує IEnumarable, чому ми не можемо тоді написати LINQ-запит? Цього ж уже достатньо.

Але ще чомусь приводимо до IEnumarable< string>... і вже до нього пишемо запит.

Ну ти вже вибач шо я так грубо, але сам розумієш шо питання просто тупе в корені...А код визиває здивування, але здивування від того як можна цей код вважати «дивним»...

2 анонім

ех... люблю я таких розумників як от ти!

Дивно тим хто недочитав ні однїєї книжки по шарпу, решта всім не дивно


Нагуглив, що “rectangular array is non-enumerable and non-queryable collection”

дивно... такий код компілюється і виконується...

string[,] SomeStrings = new string[2,2];
foreach(string s in SomeStrings)
{

}

Ну многомерный массив можно же рассматривать как одномерный — обходя его как дерево типа nested set.

А як це ви собі уявляєте наприклад join для багатовимірних масивів?)

Питання типу «чому такого-то не зробили, мені таке треба»

пиши листа розробникам.нету, чи ти думаєш шо вони тут тусуються?

Нагуглив, що “rectangular array is non-enumerable and non-queryable collection”

можливо тому і немає

Підписатись на коментарі