С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 15
1

List<List<float>> Или как оперировать коллекцией в колекции

15.07.2019, 16:31. Показов 2763. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ряд точек с координатами x,y, через гипотенузу буду рассчитывать дистанцию друг от друга

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CoorXY
{
 public float x,y;
 List<float> distance; //коллекция дистанций до других точек
}
 
class Program
{
  static List<CoorXY> listXY = new List<CoorXY>();
  public static void Main()
{
  listXY.Add(new CoorXY{x = 0, y = 0});
  listXY.Add(new CoorXY{x = 2, y = 1});
  listXY.Add(new CoorXY{x = 3, y = 4});
  listXY.Add(new CoorXY{x = -1, y = 0});
 
 
}
 
 
}
Прошу подсказать, как оптимальней всего рассчитать дистанции от каждой точки, до других точек и как их сохранить. Мне кажется что стоило через коллекцию distance в классе CoorXY

что то вроде этого

C#
1
2
3
4
5
foreach (CoorXY xy0 in listXY)
{
 
  //xy0.distance.foreach(CoorXY  1 in listXY) = Math.Sqrt( (xy1.x * xy1.x) + (xy1.y * xy1.y) );
 }}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2019, 16:31
Ответы с готовыми решениями:

Работа с коллекцией List
Здравствуйте! Мне надо вывести индекс всех элементов со значением &quot;10&quot; из списка,и удалить те,...

Что предпочтительней в плане быстродействия и работы с памятью: List<List<string>> - new или .Clear()
что предпочтительней в плане быстродействия и работы с памятью создать в цикле new...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например,...

Linq преобразование List<List<double>> в List<Array>
Доброго времени суток, данный код нужно преобразовать linq выражениями и дописать выборку из ...

10
SETI
64 / 49 / 18
Регистрация: 09.04.2018
Сообщений: 210
15.07.2019, 16:35 2
Strelokps, А зачем тебе такая коллекция? Лично мне кажется такой подход неправильным. Мы не будем знать какой точке какое расстояние соответствует и оперировать этим сложно.
0
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 15
15.07.2019, 16:50  [ТС] 3
Я указал минимум полей в классе, на самом деле их гораздо больше, и там есть и id и name
Тогда лучше использовать

C#
1
2
3
4
5
6
7
class CoorXY
{
 public float x,y;
 public string name;
 public int id;
 List<CoorXY> distance; //коллекция дистанций до других точек
}

Так вообще можно делать ?
0
управление сложностью
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
15.07.2019, 16:53 4
Цитата Сообщение от Strelokps Посмотреть сообщение
Так вообще можно делать ?
Можно, но не нужно. Лучше создать классы точка (с координатами) и фигура (будет хранить коллекцию точек с координатами)

Добавлено через 1 минуту
У класса должен быть только один мотив для изменения - расширения возможностей.
0
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 15
15.07.2019, 16:57  [ТС] 5
Цитата Сообщение от Почтальон Посмотреть сообщение
Можно, но не нужно. Лучше создать классы точка (с координатами) и фигура (будет хранить коллекцию точек с координатами)
т.е. отдельно класс точек с x,y name, id
и отдельно класс видимо с наследование от класса точек, в котором будет дистанция и name,
так ?
0
управление сложностью
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
15.07.2019, 17:01 6
Цитата Сообщение от Strelokps Посмотреть сообщение
так ?
Нет. Класс фигура, и класс точка. В классе фигуры будет коллекция точке. Ну и можно добавить метод, определяющий периметр (если фигура замкнутая)
0
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 15
15.07.2019, 17:04  [ТС] 7
Можно пример накидать,а то не очень понятно ?

Добавлено через 47 секунд
А... речь не идет о фигуре, точки расположены рандомно.
0
SETI
64 / 49 / 18
Регистрация: 09.04.2018
Сообщений: 210
15.07.2019, 17:57 8
Strelokps,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    class Figure
    {
        List<Points> list = new List<Points>();
 
        private float GetPerimeter()
        {
 
        }
 
    }
    class Points
    {
        private float x;
        private float y;
    }
0
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 15
15.07.2019, 18:29  [ТС] 9
Тогда получится, что при создании экземпляра Figure:
C#
1
List<Figure>  varList = new List<Figure>();
будет коллекция в коллекции:
varList.Add(new Figure {list})
?!
хотя мне ни каких периметров и фигур не надо ))

Может я не корректно описал проблему.

Есть ряд точек рандомно расположенных на координатной сетке. У каждой точки есть название и много других параметров. Каждая точка должна знать какая дистанция до другой точки. Мне виделось, что дистанцию и имя лучше прописывать в том же объекте, что и координаты.
Наверно можно сделать другой класс наследник, и в нем сделать коллекцию с полями selfName, distanceToName, distance, где selfName и distanceToName будут коррелировать с родительским классом.
Это явно проще для меня реализовать, но такой метод мне не нравится, т.к. добавляет новую сущность
0
SETI
64 / 49 / 18
Регистрация: 09.04.2018
Сообщений: 210
15.07.2019, 18:39 10
Strelokps, Мне лень думать, этот код только на твоей совести
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
    class Point
    {
        public double x, y;
        public List<double> distance; //коллекция дистанций до других точек
 
    }
 
    class Program
    {
        static List<Point> listOfPoints = new List<Point>();
        public static void Main()
        {
            listOfPoints.Add(new Point { x = 0, y = 0 });
            listOfPoints.Add(new Point { x = 2, y = 1 });
            listOfPoints.Add(new Point { x = 3, y = 4 });
            listOfPoints.Add(new Point { x = -1, y = 0 });
            for(int i = 0; i<listOfPoints.Capacity;i++)
            {
                for(int j = 0; j < listOfPoints.Capacity; j++)
                {
                    if (j == i)
                    {
                        continue;
                    }
                    listOfPoints[i].distance.Add(Math.Sqrt((listOfPoints[i].x * listOfPoints[j].x) + (listOfPoints[i].y * listOfPoints[j].y)));
                }
            }
        }
 
    }
0
Модератор
Эксперт .NET
15846 / 10994 / 2852
Регистрация: 21.04.2018
Сообщений: 32,252
Записей в блоге: 2
15.07.2019, 18:50 11
Цитата Сообщение от Strelokps Посмотреть сообщение
Есть ряд точек рандомно расположенных на координатной сетке. У каждой точки есть название и много других параметров. Каждая точка должна знать какая дистанция до другой точки. Мне виделось, что дистанцию и имя лучше прописывать в том же объекте, что и координаты.
Давайте разберём.

Есть тип точки.
Есть список экземпляров точек.

Теперь в список добавляем новый экземпляр.
Откуда все остальные точки могут знать, что в список добавлена ещё точка?
Откуда точка может знать, что её куда-то добавляют?

В обоих случаях - это недоступная информация для типа точки.
Поэтому эта задача (хранить расстояния) должна решаться на уровне списка точек. Можно сделать какой-то производный тип от коллекции точек, в котором переопределить методы добавления/удаления экземпляров, что бы одновременно вычислялись/удалялись расстояния до точки и сделать свойство хранящее список всех расстояний.
0
15.07.2019, 18:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2019, 18:50
Помогаю со студенческими работами здесь

Как узнать размерность внутреннего вектора в массиве List<List<Double>>?
Добрый вечер! Уважаемые, подскажите пожалуйста, как узнать размерность внутренних строк в...

Как пройтись по Списку List<Point2D> по номерам элементов которые хранятся в List<int>
Есть List&lt;int&gt; в нём хранятся номера массива Есть List&lt;Point2D&gt; .. Вопрос Как пройтись по...

Как изменить свойство элемента в list? List<MyClass>
В list содержится класс MyClass у которого есть свойства, как изменить у элемента в list требуемое...

Как написать метод List<T> ToList(DoubleList<T> list)?
Нужно преобразовать двунаправленный список к однонаправленному. Я знаю чем они отличаются, как...


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

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