Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
1

Копирование данных двумерного массива состоящего из списков в список списков.

20.11.2010, 13:17. Показов 2630. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для нахождения МСТ (минимального остового дерева) написал функцию, которая принимает масив - гарф.
C#
1
2
3
4
5
6
7
8
        private List<Point> MST(MSTType type, List<Point>[] graph)
        {
            List<Point> result = new List<Point>();
 
            // some code
 
            return result;
        }
Но для нахождения минимального МСТ, которое не равно минимальному мне нужно поочерёдно удалять все рёбра, из которых состоит МСТ и передавать новый граф в МСТ, для этого пришлось писать, как на меня избыточный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
            List<Point> result = this.MST(MSTType.FirstResult, this._graph);
 
            int best = int.MaxValue;
            for (int i = 0; i < result.Count; ++i)
            {
                // вот этот блок очень громоздкий.
 
                // начало
                List<List<Point>> newGraph = new List<List<Point>>(this._graph);
                for (int j = 0; j < newGraph.Count; ++j)
                {
                    newGraph[j] = new List<Point>(this._graph[j]);
                    for (int k = 0; k < newGraph[j].Count; ++k)
                    {
                        newGraph[j][k] = new Point((Size)this._graph[j][k]);
                    }
                }
                // конец.
 
                newGraph[result[i].X].RemoveAll(x => x.X == result[i].Y);
                newGraph[result[i].Y].RemoveAll(x => x.X == result[i].X);
                
                // сохраняем вес дерева в this.SecondResult
                this.MST(MSTType.SecondResult, newGraph.ToArray());
                best = Math.Min(best, this.SecondResult);
            }
            this.SecondResult = best;
Все что делают эти два вложенных цикла - копируют значения одного объекта другому.

Вопрос: нет ли в C# способа сделать это копирование попроще а не играться с копированием каждого элемента коллекции?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2010, 13:17
Ответы с готовыми решениями:

Из элементов списка А, состоящего из 25 целых чисел, сформировать список из 5 списков
Напишите пожалуйста программу по этой задаче Из элементов списка А, состоящего из 25 целых...

Объединение 2 и более списков в список списков по индексу без использования циклов
Уважаемые товарищи, подскажите есть ли способ объединения 2 и более списков в список списков по...

Написать программу, которая получает список из списков из списков чисел
Всем привет, мне нужно написать программу, которая получает список из списков из списков чисел,...

Как из двух списков сделать один список кортежей/списков
Доброго времени суток! Буду очень благодарен, если поможете из двух списков, к примеру a и b,...

2
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
20.11.2010, 16:28 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#region using
 
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
 
#endregion
 
namespace ConsoleApplicationTest
{
    public static class Program
    {
        private static void Main()
        {
            var list = new List<List<Point>>
                           {
                               new List<Point>
                                   {
                                       new Point(1, 2),
                                       new Point(4, 3)
                                   },
                               new List<Point>
                                   {
                                       new Point(2, 6),
                                       new Point(6, 8)
                                   }
                           };
 
            // Собственно копирование.
            var resultList = list.Select(l => new List<Point>(l)).ToList();
 
            // Удалим некоторые точки для проверки.
            foreach (var points in list)
                points.RemoveAll(p => p.X < 3);
 
            foreach (var points in list)
            {
                foreach (var point in points)
                    Console.WriteLine(point);
                Console.WriteLine();
            }
            Console.WriteLine();
            foreach (var points in resultList)
            {
                foreach (var point in points)
                    Console.WriteLine(point);
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
20.11.2010, 17:33  [ТС] 3
Спасибо за совет, обошелся не листом а тем же массивом листов, заменил тот блок на следующую строку:
C#
1
                var newGraph = this._graph.Select(list => new List<Point>(list)).ToArray();
0
20.11.2010, 17:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2010, 17:33
Помогаю со студенческими работами здесь

Список списков после добавления списков остается пустым
Здравствуйте имеется код: def lookup_main_url(driver): subjects = .... for county...

Как сериализовать Список списков списков?
У меня есть игра, в ней пользователь может сохранять уровни и играть их в будующем. На каждом...

Список списков списков чисел
Всем привет) Задание: l1 - список списков списков чисел. Необходимо получить список чисел l2,...

Копирование данных из выпадащих списков - есть ли такая программа?
Всем приветы! Сорри, если написал не в ту тему. Очень нужна помощь вот по какому вопросу: есть один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru