linq из одномерного списка создаем двумерный..как лучше
От: Аноним  
Дата: 07.01.11 07:18
Оценка:
Есть список с большим количеством элементов List<int>, нужно его разбить на страницы определенного размера и вывести определенное количество страниц.

Сделал вот так, но что-то уродливо выглядит, особенно не нравится
1)
.ToLookup( .. )
.ToList() — только ради ForEach, может как-то можно из ToLookup это сделать без преобразования в список.

2) new { idx, x } — лишнее выделение памяти

3) int index = 0, как-то не хочется такой механизм использовать через переменную.

4) .Take( page_size * num_pages ) — тоже както вульгарно, хочется их как-то разнести чтобы они четко выражали свою задачу..а не перемножать огурцы с помидорами.


        static void Main(string[] args)
        {

            List<int> list = new List<int>();
            var rnd = new Random();
            for (int i = 0; i < 1000; i++)
                list.Add(rnd.Next(1000));

        
            int index = 0;
            int page_size = 10;
            int num_pages = 5;
          
            list.Select( x => new { idx = index++, x })
                .Take( page_size * num_pages )
                .ToLookup( key => key.idx/page_size )
                .ToList().ForEach(
                    k =>
                        {
                            Console.WriteLine( "________Страница № {0}________", k.Key );
                            k.ToList().ForEach(
                                item => Console.Write( "{0},", item.x )
                                );
                            Console.WriteLine("");
                            Console.WriteLine("");
                        }
                );


            Console.ReadKey();
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.