2014-08-27 9 views
0


Я хочу сохранить некоторые координаты в словаре, НО xPos должен быть дважды или больше в словаре.

Проблема заключается в том, что появляется следующее исключение:
ArgumentException: An element with the same key already exists in the dictionary.

Как я могу решить эту проблему?Список или словарь или что-то еще?

Я все думал, что могу использовать список или массив, но мне нужен ключ и значение.

После того как я сохранил координаты в Dict (или что-то еще), я хочу проверить, является ли новая координата определенным расстоянием от существующих.

xPos всегда одинаково:
Существует «график», где я помещаю несколько блоков в ряд с разными yPos.
1. Блок: XPOS = 0, YPOS = случайное
2. Блок: XPOS = 1, YPOS = случайное
...
н. Блок: xPos = 80, yPos = случайный
n + 1. Блок: xPos = 0, yPos = 20 + random

У меня есть три итерации, для каждой из которых размещены 80 блоков.

enter image description here

SORRY за мой плохой английский: |
Надеюсь, вы могли бы понять.

+0

Вы хотите связать несколько значений 'Y' с одним значением' X'? – Jonesopolis

+0

Нет. Я хочу сохранить несколько точек, которые имеют одинаковые xPosition. – Ismoh

+0

Я не думаю, что вы хотите «Key' /' Value », а затем – Jonesopolis

ответ

1

Или вы можете использовать List из Tuple к списку магазина из int - int пара без создания нового класса и, не беспокоясь о повторяющихся значениях:

..... 
List<Tuple<int, int>> blocks = new List<Tuple<int, int>>(); 
blocks.Add(Tuple.Create(0, random)); 
blocks.Add(Tuple.Create(1, random)); 
..... 
+0

То же, что и 'List >'? Если это так, я думаю, что это лучшее решение для использования структуры. – Ismoh

+1

Да, оба в этом случае почти одинаковы. Только 'Tuple' может обрабатывать больше пары, f.e' Tuple 'и т. Д. (Похоже, пока что вам не нужна функция) – har07

+0

Спасибо большое! – Ismoh

1

Вы можете создать класс (или структуру), чтобы сохранить и использовать ваши координаты вместо словаря. Класс может иметь свойства Key и Value, а также дополнительные поля, если это необходимо.

1

Вы должны сохранить значения как список, где позиция содержит:

public int X { get; set; } 
public int Y { get; set; } 

Или вы можете использовать некоторые другой класс /-структуру из C# или некоторых 3-библиотек (2d вектора, точки и т.д.) зависит от того, где вы хотите использовать его. :)

+0

Я думаю, что структура - самый простой способ. Но сначала мне нужно, чтобы Google работал. – Ismoh

+0

Ну, структура такая, как класс, не так ли?так что мне нужно создать x-объекты, связанные с количеством блока ?! – Ismoh

0

Поскольку вы хранящие точках в 2-е поверхность и хотите выполнить обнаружение в ближайшей точке, я бы рекомендовал использовать Binary Space Partitioning (BSP) tree, например QuadTree. Вот link для реализации quadtree в C#.