【问题标题】:List or Dictionary or something else?列表或字典或其他东西?
【发布时间】:2014-08-27 12:55:11
【问题描述】:


我想在字典中保存一些坐标,但是字典中的 xPos 应该是两倍或更多。

问题是出现如下异常:
ArgumentException: An element with the same key already exists in the dictionary.

我该如何解决这个问题?

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

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

xPos 总是一样的:
有一个“图表”,我在其中将一些具有不同 yPos 的块连续放置。
1. 区块:xPos = 0, yPos = 随机
2. 区块:xPos = 1, yPos = 随机
...
n.块:xPos = 80,yPos = 随机
n+1。区块:xPos = 0,yPos = 20 + 随机

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

对不起,我的英语不好:|
希望你能理解。

【问题讨论】:

  • 是否要将多个Y 值与一个X 值关联?
  • 没有。我想保存多个具有相同 xPositions 的点。
  • 我不认为你想要Key/Value 那么
  • 我想要一个KeyValue关联,因为当我检查新Block是否与另一个Block有一定距离时,我可以使用key来检查值。
  • Point 的列表有什么问题?

标签: c# dictionary argumentexception


【解决方案1】:

或者您可以使用List of 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));
.....

【讨论】:

  • List&lt;KeyValuePair&lt;int,int&gt;&gt;一样吗?如果是,我认为这是一个更好的解决方案,然后使用结构。
  • 是的,在这种情况下两者几乎相同。只有Tuple 可以处理多个pair,f.e Tuple&lt;int, int, int, int&gt; 等(不过,这似乎不是您现在需要的功能)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    或者您可以使用 C# 中的其他类/结构或某些第 3 库(2d 向量、点等),具体取决于您要在哪里使用它。 :)

    【讨论】:

    • 我认为结构是最简单的方法。但首先我需要谷歌它是如何工作的。
    • 结构体就像一个类,不是吗?所以我必须创建与块数量相关的 x-objekts?!
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2018-01-15
      • 2018-11-23
      • 1970-01-01
      相关资源
      最近更新 更多