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 и двумерный массив
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.09.09 09:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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]: а в обратном направлении
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.09.09 08:11
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>А как перебирать массивы в обратном направлении ?


А>То есть


А>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 Япония http://sams-tricks.blogspot.com
Дата: 22.09.09 12:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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.

Как лабораторная работа? Сдал уже?
Re[6]: :)
От: Аноним  
Дата: 24.09.09 04:35
Оценка:
Здравствуйте, Kore Sar, Вы писали:

KS>Как лабораторная работа? Сдал уже?


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