8

关于:我的数学程序将有大量的项目进行迭代。它主要由一个项目和一个指向另一个项目的指针((int)项目,(int)指针)组成,类似于键值对。但是,每个项目都有自己的其他几个属性,如下所示:

(项目,指针),(属性,属性,属性,...)

项目、指针和属性将经常添加。

搜索这个网站和其他网站让我对程序使用什么集合更加一无所知。

目前,在 vcskicks.com 上找到的Dictionary解决方案似乎效果最好:

Dictionary<Dictionary<int,int>,Dictionary<int,int> nestedDictionary = 
    new Dictionary<Dictionary<int,int>,Dictionary<int,int> nestedDictionary();

或用简单的语言:

Dictionary<Dictionary<item, pointer>, 
           Dictionary<attribute,attribute, ...> nestedDictionary =      
    Dictionary<Dictionary<item, pointer>, 
               Dictionary<attribute,attribute, ...>();

请注意,属性的数量不是预定义的,它的长度会有所不同。由于性能开销,此时我也不愿意使用对象。

哈希集似乎不适合,因为会存在重复项,但是它们将具有不同的属性。或者一个哈希集可以有重复的项目,但只是没有重复的哈希键?似乎有些混乱。

根据一些以下哈希集将不会计算:

11011, 0001
11011, 0011

根据其他人的说法,它会,因为它会有不同的哈希键。这让我很困惑。

我的问题:

有模糊的风险:什么是最好的收集类型?如有必要,我很乐意为故事添加更多内容。

编辑

巨人意味着:潜在的数百万件物品。所有项目都会有一个指针和属性。 一般用途搜索特定项目,检索指针,获取下一个指针的项目,直到没有指针为止。同时收集每个项目的所有属性。将定期添加,仅偶尔删除。 指针:指针是它所指的项目的索引。如果您有 2 项,并且第一项链接到第二项,则第一项将具有第二项的索引作为指针。 最佳定义为内存使用率和速度。最后,所有找到的项目将相互比较。 例子:

[Item , pointer] [attribute, attribute, ...]
[11011,    1001] [ 1101,        1111 ]
[10001,    1000] [ 1110,        0101 ]
[11111,    0010] [ 1111,        1110 ]
[11011,    0001] [ 0010,        1010 ]

谢谢

4

1 回答 1

2

所以,基本上看起来你需要保留一个对象的集合,每个对象都具有以下属性:

  • 引用逻辑一项
  • 属性

所以一个项目看起来像这样(只是一个简单的例子......不完全是保持所有内容公开的最佳实践,但在你的情况下你不会介意):

public struct MyItem
{
   public Dictionary<String, String> attributes;
   public MyItem next;
}

那么你所需要的就是保留一个列表:

List<MyItem> myList;

当你想添加一些东西时,很容易:

MyItem item1 = new MyItem();
item1.attributes["name"] = "Joe";
item1.next = null; // this is the default behaviour... just illustrating here
myList.Add(item1);

MyItem item2 = new MyItem();
item2.attributes["name"] = "Mary";
item2.next = item1;
myList.Add(item2);

然后,当您要遍历时,只需跟随下一步即可。

MyItem item = myList[0];
while (item != NULL)
{
    Console.WriteLine(item["name"]);
    item = item.next;
}

希望这可以帮助。

于 2013-04-08T13:03:52.153 回答