C# 在填充列表时,是否可以使用IComparer散列列表?

C# 在填充列表时,是否可以使用IComparer散列列表?,c#,list,sorting,hash,icomparer,C#,List,Sorting,Hash,Icomparer,我不熟悉使用IEnumerable接口。我总是编写自定义哈希排序,而不是尝试使用本机语法,因为我对实现有点困惑。我试图确定是否可以使用BinarySearch或类似的函数以排序格式组装列表。是否有一个函数可以返回最接近的索引,以便在列表中插入新项,从而在每次插入项时列表始终通过哈希树进行排序 当我使用BinarySearch时,如果没有匹配项,它似乎总是返回-1。我宁愿它返回最接近的索引。有没有办法通过本机IEnumerable接口实现这一点?我不想每次我想参考名单的时候都打电话给巫师比较 简而

我不熟悉使用IEnumerable接口。我总是编写自定义哈希排序,而不是尝试使用本机语法,因为我对实现有点困惑。我试图确定是否可以使用BinarySearch或类似的函数以排序格式组装列表。是否有一个函数可以返回最接近的索引,以便在列表中插入新项,从而在每次插入项时列表始终通过哈希树进行排序

当我使用BinarySearch时,如果没有匹配项,它似乎总是返回-1。我宁愿它返回最接近的索引。有没有办法通过本机IEnumerable接口实现这一点?我不想每次我想参考名单的时候都打电话给巫师比较


简而言之:向列表中添加新项时,是否可以使用BinarySearch或其他等效函数来查找最佳索引,以便将项、索引插入列表

考虑使用,它具有保持列表排序的内置支持。这样做的好处是确保内容始终按排序顺序排列,而不是在修改列表时依赖代码正确地遵守排序顺序。

如果有人遇到这种情况,第一种解决方案是在提问之前始终仔细阅读文档


如果没有找到匹配项,BinarySearchIComparer将返回次优位置的逐位补码,因此它满足了在填充列表时对列表进行二叉树排序的需要。当我看到它返回-1时,我错误地认为这意味着找不到,因为我经常使用-1表示找不到,否则整数应该是正的。

谢谢,我只知道SortedList不是我想要的。我知道在某个地方一定有这样的课程。嗯。。。MSDN说SortedSet使用线性搜索模式。。。这不是违背了使用IComparer的目的吗?还是有一个原因,它必须是线性的,以逃避我的推理关于IComparer接口?现在,所有类似IComparer的类对我来说都是一个黑匣子——我想你知道我的意思吧……IComparer只返回一对值的单个比较结果;它不提供任何其他信息,比如散列。哈希是由该方法提供的,至少在派生类实现它时是这样。这就是像Dictionary这样的类如何生成它们的哈希。我刚才通过更仔细地查看BinarySearch的文档回答了我自己的问题——显然,它返回下一个可用位置的按位补语,-1的补语是0,所以我认为-1代表not found实际上是-1代表not found在0处插入。对不起,浪费了你的时间。。。你的建议很好,但我要回答我自己的问题。SortedSet在我看来太慢了。@ThisHandlenotius,你在哪里看到插入是线性的引用?我在dotPeek中打开了代码,看起来SortedSet是在后台使用一个红黑树实现的,其中插入了OLOGN。