gpt4 book ai didi

c# - 可以使用具有正确实现的比较器的 SortedList<>/SortedDictionary<> 来保证插入顺序吗?

转载 作者:行者123 更新时间:2023-11-30 13:57:33 24 4
gpt4 key购买 nike

如果目标是创建一个保留插入顺序的通用只读字典,SortedList<,> 或 SortedDictionary<,> 是否可以与尝试维护插入的 IComparer<> 一起使用通过执行类似于以下的操作来排序?

class OrderedComparer<T> : IComparer<M>
{
public int Compare(M x, M y)
{
return x.Equals(y) ? 0 : -1;//or 1
}
}
SortedList<M> orderedList = new SortedList<M>(new OrderedComparer<T>());

(有趣的是,在 SortedDictionary 的情况下,上述方法需要返回 0 或 1,以防止元素以相反的插入顺序排序)。

最佳答案

比较器必须遵守规律

Compare(a, b) == -Compare(b, a) //assuming only possible values are -1, 0, 1

这是 symmetry property .您的示例代码不遵守它。因此,BCL 系列根本不给您任何保证。您违反了记录在案的契约(Contract)。

你不能这样做。

相反,您可以向 M 添加一个新字段,将插入顺序存储为 int。然后您可以在比较器中使用该字段。

关于c# - 可以使用具有正确实现的比较器的 SortedList<>/SortedDictionary<> 来保证插入顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20480654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com