日期:2014-05-18  浏览次数:20828 次

SortedList键值对存储顺序问题
通过StreamReader sr= new StreamReader(filename)读取txt文件,文件格式是这样的:
张/100
李/1000
王/1000
读完后通过split(‘/’)方法分别放在string[]中,然后以前面的姓氏为“键”,其他的内容为“值”,分别放到之前定义好的SortedList<string, Something> customs = new SortedList<string, Something>()中去。
然后查看customs列表,发现键中“李”是第一个,“王”第二个,“张”第三个。按照顺序的话应该是“张”是第一个键,为什么会出现顺序不一致的情况呢??
不吝赐教,谢谢!

------解决方案--------------------
1、SortedList 的容量是 SortedList 可以保存的元素数。SortedList 的默认初始容量为 0。随着元素添加到 SortedList 中,在需要时可以通过重新分配自动增加容量。可通过调用 TrimToSize方法 或通过显式设置 Capacity 属性减少容量。

2、SortedList 中不允许重复键。

3、SortedList的索引顺序基于排序顺序。当添加元素时,元素将按正确的排序顺序插入 SortedList,同时索引会相应地进行调整。当移除元素时,索引也会相应地进行调整。因此,当在 SortedList 中添加或移除元素时,特定键/值对的索引可能会更改。

4.当不向集合中添加新元素,则调用TrimToSize方法可用于最小化集合的内存开销。

5、通过设置 SortedList 中不存在的键值(例如,myCollection["myNonexistentKey"] = myValue),还可以使用 Item 属性添加新元素。但是,如果指定的键已经存在于 SortedList 中,则设置 Item 属性将改写旧值。相比之下,Add 方法不修改现有元素。

键不能为 空引用(在 Visual Basic 中为 Nothing),但值可以。若要区分由于未找到指定键而返回的 空引用(在 Visual Basic 中为 Nothing) 和由于指定键的值为 空引用(在 Visual Basic 中为 Nothing) 而返回的 空引用(在 Visual Basic 中为 Nothing),请使用 Contains 方法或 ContainsKey 方法确定列表中是否存在该键。

当你按照姓氏来作为键的情况下,很明显对姓氏做了有序排列,应该是按照中文的声母和韵母来进行排序,故而Li>Wang>Zhang

------解决方案--------------------
L,W,Z,,,英文字母的排序格式
和手机上通讯录一样排的

你用姓做键,有同姓的,会加不进去SORTEDLIST的哦
------解决方案--------------------
读取的时候记录下index不就可以了么。

使用 List<Tuple<int, string, int>> 代替 SortedList。
------解决方案--------------------
那就用List<string, something>
------解决方案--------------------
List<KeyValuePair<string, Something>> list