2012-12-06 22 views
0

我有一组数据,其中包含名称和关联的内容。因此,我会用类似HashTableDictionary的东西来存储这些项目。对HashTable,Dictionary等中的元素进行排序

我需要用两个优先级对这些数据进行排序。首先他们应该按照字母顺序排列,然后按照特定的顺序将一些项目放在开头。

如果字母顺序是我唯一的要求,我会使用SortedDictionary。该字典根据密钥自动对元素进行排序。

我正在寻找的是一个类,它允许我做:

  1. 以字母顺序
  2. 移动添加元素以随机顺序
  3. 排序的所有元素(或删除和插入)元素开头(或更通用:在我想要的任何地方)。
+0

理论上你能想出一个比较方法来指定顺序吗?如果是这样,有几个集合类,你可以使用(我会发布一个正确的答案)。 –

+0

@MthetheWWatson好的,没错。我必须将这些特定元素的正确顺序应用到这种比较方法中。不知道这是不是一个很好的解决方案。尽管如此,也是可以的。 – Em1

回答

1

为什么不看SortedList<TKey, TValue>

这应该有适当的功能,让你做你想做的,它是快速的排序!

+0

那么,这个集合并不具备所有适当的功能,但是我实现了比较方法来满足我的需求。接受,因为这种方法最接近我所寻找的,而所有其他人的答案也很好。 – Em1

1

没有内置集合,做你所需要的,但你可以建立自己的比较容易:

  • 写的IDictionary<TKey,TValue>
  • 的实现将一个Dictionary<TKey,TValue> dictList<TKey> keys
  • 将元素添加到dict时,还要将其密钥添加到keys
  • 当请求迭代时,迭代keys然后查找条目在dict

如果您收藏组织这样一来,你能够独立的字典项的键重新排序。由于在更改字典的操作中应该发生的双重“簿记”,您在实现时需要小心。除此之外,解决方案应该相对简单。

+0

我希望避免两次钥匙。但我认为这种方法是实施一个简洁解决方案的一种非常明智的方式。 – Em1

1

如果此数据的名称可以重复,则您没有提供信息。一般来说,我认为你可以用不同的方式来保存这些数据。你应该记住,Dictonaries的本质是保存键/值数据,其中键是唯一的。元素的顺序不是字典的本质。这是我认为的更多列表问题。所以你可以尝试将Dictionary与Linq混合到Objects。但也许尝试使用通用

List< KeyValuePair< TKey, TValue>>. 
+0

好主意。我会给它一个镜头。 – Em1

相关问题