我正在寻找C#中的排序列表,但是在插入所有内容后插入一个未排序的项目。
SortedList
和Dictionary
都不合适,因为我可能有重复的密钥。
例如:
list.Insert(1001, v1);
list.Insert(1002, v2);
list.Insert(1002, v3);
list.Insert(1003, v4);
答案 0 :(得分:4)
一种可能性是编写一个自定义比较器,它允许集合中的重复键:
public class DuplicateKeyComparer<TKey> : IComparer<TKey> where TKey : IComparable
{
public int Compare(TKey x, TKey y)
{
var res = x.CompareTo(y);
return res == 0 ? 1 : res;
}
}
然后使用SortedList<TKey, TValue>
:
var comparer = new DuplicateKeyComparer<int>();
var list = new SortedList<int, string>(comparer);
list.Add(1001, "v1");
list.Add(1002, "v2");
list.Add(1002, "v3");
list.Add(1003, "v4");
显然,您应该注意这种方法的罪魁祸首 - 您永远无法从此集合中删除任何密钥。因此,如果您打算使用list.Remove(1002)
作为示例,那么您将需要一种替代方法。