SelectMany и двумерный массив
От:
Аноним
Дата: 18.09.09 06:52
Оценка:
Есть массив int[size1][size2] arr1.
Его надо превратить в плоский массив, то есть int[size1 * size2] arr. Сначала берем элементы первого из масивов, потом второго и т.д.
По идее, это должен уметь делать оператор SelectMany, но у меня он не получается.
Пока сделал так:
int [][] data;
// инициализация массива
var arr = from n in data from x in n select x;
Как переписать через метод расширения SelectMany ?
Re: SelectMany и двумерный массив
От:
Ziaw
Дата: 18.09.09 07:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>
А>int [][] data;
А>// инициализация массива
А>var arr = from n in data from x in n select x;
А>
А>Как переписать через метод расширения SelectMany ?
var arr = data.SelectMany(n => n, (n, x) => x);
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[2]: SelectMany и двумерный массив
От:
Аноним
Дата: 18.09.09 07:57
Оценка:
Здравствуйте, Ziaw, Вы писали:
Z>Z>var arr = data.SelectMany(n => n, (n, x) => x);
Z>
Работает, спасибо.
А как сделать, чтобы возвращалась не var, а например byte[] ? Попробовал через приведение — не помогло
Re[3]: SelectMany и двумерный массив
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Ziaw, Вы писали:
Z>>Z>>var arr = data.SelectMany(n => n, (n, x) => x);
Z>>
А>Работает, спасибо.
А>А как сделать, чтобы возвращалась не var, а например byte[] ? Попробовал через приведение — не помогло
int [][] data = new []
{
new [] {0, 1, 2},
new [] {3, 4, 5},
};
byte [] arr = data
.SelectMany(n => n, (n, x) => (byte )x)
.ToArray();
Re[4]: а в обратном направлении
От:
Аноним
Дата: 21.09.09 06:08
Оценка:
Здравствуйте, samius, Вы писали:
S>byte[] arr = data
S> .SelectMany(n => n, (n, x) => (byte)x)
S> .ToArray();
S>[/c#]
ОК, ясно.
А как перебирать массивы в обратном направлении ?
То есть
int[size1][size2] arr
Перебирать так: от 0 до size1 — 1 , а по второму измерению — от size2 — 1 до 0.
Re[5]: а в обратном направлении
Здравствуйте, Аноним, Вы писали:
А>А как перебирать массивы в обратном направлении ?
А>То есть
А>int[size1][size2] arr
А>Перебирать так: от 0 до size1 — 1 , а по второму измерению — от size2 — 1 до 0.
byte [] arr = data
.SelectMany(n => n.Reverse() , (n, x) => (byte )x)
.ToArray();
Re[6]: а в обратном направлении
От:
Аноним
Дата: 22.09.09 11:15
Оценка:
Здравствуйте, samius, Вы писали:
А если такой перебор ?
// Размерности в data[i] массивах одинаковые...
int [][] data;
// ...
int len1 = data.Length;
int len2 = data[0].Length;
for (int j = len2 - 1; j >= 0; j--)
{
for (int i = 0; i < len1; i++)
{
// Добавление элемента
}
}
Re[7]: а в обратном направлении
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, samius, Вы писали:
А>А если такой перебор ?
А>// Размерности в data[i] массивах одинаковые...
А>А> int [][] data;
А> // ...
А> int len1 = data.Length;
А> int len2 = data[0].Length;
А> for (int j = len2 - 1; j >= 0; j--)
А> {
А> for (int i = 0; i < len1; i++)
А> {
А> // Добавление элемента
А> }
А> }
А>
var q = Enumerable.Range(0, data[0].Length).Reverse()
.SelectMany(j => Enumerable.Range(0, data.Length).Select(i => data[i][j]));
P.S. Интересно, а что улыбнуло
Ziaw в моем предыдущем ответе?
Re[8]: а в обратном направлении
От:
Ziaw
Дата: 23.09.09 04:53
Оценка:
Здравствуйте, samius, Вы писали:
S>P.S. Интересно, а что улыбнуло Ziaw в моем предыдущем ответе?
Терпение
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[5]: а в обратном направлении
От:
Kore Sar
Дата: 23.09.09 11:01
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, samius, Вы писали:
S>>byte[] arr = data
S>> .SelectMany(n => n, (n, x) => (byte)x)
S>> .ToArray();
S>>[/c#]
А>ОК, ясно.
А>А как перебирать массивы в обратном направлении ?
А>То есть
А>int[size1][size2] arr
А>Перебирать так: от 0 до size1 — 1 , а по второму измерению — от size2 — 1 до 0.
Как лабораторная работа? Сдал уже?
От:
Аноним
Дата: 24.09.09 04:35
Оценка:
Здравствуйте, Kore Sar, Вы писали:
KS>Как лабораторная работа? Сдал уже?
А что, вам помощь нужна ? списать хотите ?
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить