Member 14422952 Ответов: 1

Linq с зубчатыми массивами


Я пытаюсь понять часть кода, но не уверен, что понимаю. Я буду очень благодарен, если кто-нибудь объяснит мне, что здесь происходит:

foreach (var row in jaggedArray.Skip(1).OrderBy(r => r[headerIndex]))
{
    Console.WriteLine(string.Join(" | ", row));
}


Что я уже пробовал:

Я предполагаю, что .Skip(1) пропускает первую строку, но после этого я ничего не понял. Я приведу вам пример того, что делает этот код:

4
name, age, grade
Peter, 25, 5.00
George, 34, 6.00
Marry, 28, 5.49
sort name

Это пример ввода. Наш зубчатый массив имеет 4 строки и 3 столбца. Мы должны отсортировать заголовок имени так, чтобы в этом случае индекс заголовка был равен 0. Заранее благодарю вас!

1 Ответов

Рейтинг:
7

Thomas Daniels

OrderBy упорядочивает все элементы в перечислимом по определенному ключу. В вашем примере" элементы" - это массивы, а "ключ" - это N-й элемент в массиве (где N зависит от headerIndex).

Вот вам пример:

object[][] jaggedArray = new object[][] {
    new object[] { "Apples", 3.5, 200 },
    new object[] { "Bananas", 4.8, 50 },
    new object[] { "Ananas", 5.7, 75 }
}; // array of items in a store, with their name, price, and number in stock

var headerIndex = 0; // 0 for name, 1 for price, 2 for stock
foreach (var row in jaggedArray.Skip(1).OrderBy(r => r[headerIndex]))
{
    Console.WriteLine(string.Join(" | ", row));
}
Это отпечатки пальцев:
Ananas | 5.7 | 75
Bananas | 4.8 | 50
Потому что первый элемент, яблоки, пропускается, а остальные элементы сортируются по r[headerIndex] (это r[0] в Примере, поэтому имя элемента).


Member 14422952

Но как сохраняются остальные столбцы? Я имею в виду, что яблоко все еще соответствует своей цене и количеству на складе.

Thomas Daniels

Заказатьпо лишь указывает как чтобы упорядочить, но сами элементы, как в jaggedArray.Skip(1) хранятся как есть.

Member 14422952

Если я правильно понимаю, мы говорим "заказать таблицу по имени", и OrderBy() сохраняет соответствующие элементы, не так ли?

Thomas Daniels

Я не совсем понимаю, что вы подразумеваете под словом "спасает".

Вот что делает OrderBy: он получает коллекцию. В данном случае это так. jaggedArray.Skip(1) Он сортирует элементы по указанному вами способу и возвращает его.