列表或字典或其他?

时间:2014-08-27 12:55:11

标签: c# dictionary argumentexception


我想在字典中保存一些坐标,但是字典中的xPos应该是两倍或更多
问题是出现以下异常:
ArgumentException: An element with the same key already exists in the dictionary.

我该如何解决这个问题呢?

我已经认为我可以使用List或数组,但我想要一个Key和一个值。

在Dict(或其他)中保存坐标后,我想检查新坐标是否与现有坐标相距一定距离。

xPos总是一样的:
有一个"图表"我将一些块放在一个具有不同yPos的行中 1.阻止:xPos = 0,yPos =随机
2.阻止:xPos = 1,yPos =随机
...
ñ。阻止:xPos = 80,yPos =随机
的n + 1。阻止:xPos = 0,yPos = 20 +随机

我有三次迭代,每放置80个块。

enter image description here

抱歉我的英语不好:|
我希望你能理解。

4 个答案:

答案 0 :(得分:1)

您可以创建一个类(或结构)来保留和使用您的坐标,而不是字典。 如果需要,该类可以具有键和值属性以及其他字段。

答案 1 :(得分:1)

您应该保存像List这样的值,其中Position包含:

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

或者你可以使用C#中的另一个类/结构或某些第三个库(2d vector,point等)取决于你想要使用它的位置。 :)

答案 2 :(得分: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));
.....

答案 3 :(得分:0)

由于您要在二维曲面中存储点并想要进行最近点检测,因此我建议使用Binary Space Partitioning (BSP) tree,例如QuadTree。这是C#中四元树实现的link