先说下操作步骤:
1.添加 A ,B ,C 3个枚举项(Dictionary(TKey, TValue).Add 方法)。这时字典中的枚举项是
  A
  B
  C
2.移除B(Dictionary(TKey, TValue).Remove 方法),这时字典中的枚举项是
  A
  C
3.添加D到字典中(Dictionary(TKey, TValue).Add 方法),这时字典中的枚举项是
  A
  D
  C
这是为什么呢?我想要的结果是
  A
  C
  D

解决方案 »

  1.   

    Dictionary中的项目顺序不是按添加顺序排序的,他的排序应该和key的hash值有关,
      

  2.   

    添加到dictionary的value是没有顺序的,他是按照一定的散列分布的规则进行分布的,每一个key对应一个value,通过gethascode返回一个整数,然后确定value的位于散列表的位置
      

  3.   

    不是SQL,它有它自己的一套规则
      

  4.   

    Dictionary<K,R> 从来也没有承诺过枚举是某种顺序的啊?!只能说你错用了它。它很大程度上就像内存堆中分配对象空间一样,并不轻易挪动已经使用的空间。
      

  5.   

    这类数据结构简单地说,有两个链表,一条链表串联了所有已经分配的块,另一条链表分配了所有空闲的块。而每一个数据块中则以数组的形式保存多个hashcode相同的数据。它综合了数组和链表的特点,并且也具有重复使用空闲空间的特点。但是就是没有你要的特点。.net framework中应该有有很多其它形式的集合可以使用。退一步说,你可以把关于Key的排序结构与关于<Key,Value>的结构分开保存。再退一步说(其实更好的做法),借助与HttpRuntime.cache,实际上可以把许多操作结果缓存起来以提高程序效率,而不一定追求最完美的存储结构。
      

  6.   

    了解了。感谢各位热心的朋友,我已经改用list<string>来实现功能
      

  7.   

    如果都是string类型,你可以使用NamevalueCollection类