LINQ: Как перевести 1D Array в 2D Array By Row - PullRequest
0 голосов
/ 23 мая 2019

Есть ли способ в Linq взять каждый элемент в моей строке [] и назначить каждый элемент квадратному многомерному (2D) массиву по его строке.Значение 2D [0, i], где i увеличивается на 1, назначая 1D [i] там.Обратите внимание, что 1D-массив гарантированно имеет ту же длину, что и ширина 2D-массива.Кроме того, мой метод доступа к 2D-массиву ограничен только индексатором класса, поэтому мой индексатор класса выглядит следующим образом, CLASS [r, c].

Вот как я создаю свой одномерный массив: lineRead.Split(" ", StringSplitOptions.RemoveEmptyEntries);

В коде sudo это то, чего я хочу достичь.

lineRead.Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(e => CLASS[r,c] = e);

Я ужасно отношусь к Linq и чувствую, что должен быть способ сделать этоОчевидно, я не знаю, что я здесь делаю с Линком ... Lol. Есть идеи, любая помощь?Спасибо

1 Ответ

1 голос
/ 23 мая 2019

Предполагая, что r является константой (0, поскольку вы не упоминаете в своем посте), вот один из способов сделать это:

string lineRead = "apple mango orange grape";
int i = 0;
lineRead.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)
.ToList()
.ForEach(item => { CLASS[0, i++] = item; });

Пример вывода:

КЛАСС [0,0] = "яблоко"

КЛАСС [0,1] = "манго"

КЛАСС [0,2] = "оранжевый"

КЛАСС [0,3] = "виноград"

Хотя, откровенно говоря, старый добрый цикл for тоже подойдет:

string lineRead = "apple mango orange grape";
var values = lineRead.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < values.Length; i++)
{
    CLASS[0,i] = values[i];
}
...