我找了半天,貌似大部分容器都是对整体进行排序,
SortedList能实现类似的功能,但是它是键值对,键不能重复
有没有个类似List的容器,它能在Add数据的时候,按照顺序进行排序,即其内部有个插入排序的逻辑,保证最后得到的List数据总是有序的
可以用 SortedSet
var numbers = new SortedSet<int>();
numbers.Add(1);
numbers.Add(3);
numbers.Add(2);
foreach (var number in numbers)
{
Console.WriteLine(number);
}
// output:
// 1
// 2
// 3
SortedSet会把相同的数据合并,有没有不会合并的啊
SortedSet<string> sl = new SortedSet<string>();
sl.Add("aaa");
sl.Add("aaa");
sl.Add("bbb");
sl.Add("ccc");
@WmW: 可以自己实现 IComparer<T>
传给 SortedSet
var numbers = new SortedSet<int>(new DuplicateComparer<int>());
numbers.Add(1);
numbers.Add(3);
numbers.Add(3);
numbers.Add(2);
foreach (var number in numbers)
{
Console.WriteLine(number);
}
// output:
// 1
// 2
// 3
// 3
public class DuplicateComparer<T> : IComparer<T>
where T : IComparable
{
public int Compare(T? x, T? y)
{
var result = x.CompareTo(y);
return result == 0 ? 1 : result;
}
}
@dudu: 好的,感谢!
在 C# 中,如果您想要在插入数据时自动进行排序的容器,可以使用 SortedSet<T> 类。SortedSet<T> 是一个有序集合,它在插入元素时会根据元素的值进行排序。
以下是使用 SortedSet<T> 的示例代码:
csharp
Copy code
SortedSet<int> sortedSet = new SortedSet<int>();
// 添加元素
sortedSet.Add(5);
sortedSet.Add(2);
sortedSet.Add(8);
// 输出排序后的元素
foreach (int item in sortedSet)
{
Console.WriteLine(item);
}
输出结果将按照升序排序:
Copy code
2
5
8
请注意,SortedSet<T> 不允许重复的元素。如果您需要处理重复元素,可以考虑使用 SortedDictionary<TKey, TValue> 类,它是基于键值对的有序字典。
SortedSet会把相同的数值合并,有么有不合并的啊
SortedList 可以传入一个IComparer<TKey> 对象. 自己实现这个, 如果 相等就返回1. 可以做到重复的key插在后面.