问题标签 [icomparer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 什么时候比较器会让 Sort 抛出 ArgumentException?
Sort的文档说,如果“比较器的实现在排序过程中导致错误。例如,比较器在将项目与自身进行比较时可能不会返回 0”,Sort 将抛出 ArgumentException。
除了给出的例子之外,谁能告诉我什么时候会发生这种情况?
c# - IComparer 问题 + 如何在 .NET 中自然地对字符串数组(FILE_10 > FILE_2)进行排序?
在我的帖子底部解决。
或者更具体地说:
我有一堆 FileInfo 对象(我需要 FileInfo 对象来排除隐藏、系统和重新分析点文件)。
我需要根据 FileInfo.FullName 自然地对 FileInfo[] 进行排序。所以 FILE_10.ext 应该在 FILE_2.ext 之后。幸运的是 FileInfo[] 只包含一个扩展名的文件。
我已经实现了一个比较器:
现在问题出现了,int.Parse 抛出了一个溢出异常,我无法在正确的位置捕获它(由于某种原因,它再次出现在 return 语句的行上,我无法在更上一层智能地处理它,因为它永远不会到达那里)。
问题是:这种事情是否有预先实现的比较器?异常出现在有趣的地方的原因可能是什么?
调用代码:
EDIT1: Int.Parse 在遇到太大的数字时抛出 OverflowException。它不应该经常发生,但我希望它被覆盖。
EDIT2:我最终调整了自己的比较器。离开了 int.Parse 并且只是用零填充以进行比较。代码在这里:
.net - 何时使用 IComparable比。比较器
我试图弄清楚我需要实现哪些接口。他们基本上都做同样的事情。我什么时候会使用其中一个?
c# - 使用 IComparer 随机播放
首先,我知道Fisher-Yates shuffle。但是,为了争论,我想允许用户从下拉列表中选择一个排序选项。该列表将包括一个“随机”选项。根据他们的选择结果,我只想用 IComparer 实例替换我的排序。IComparer 会是什么样子?
谷歌提出了大量有缺陷的结果,它们都采用这种形式:
但是,这种实现是有偏见的,在某些情况下甚至会抛出异常。偏差可以用下面的代码来证明:
那么如何实现一个随机IComparer<T>
的来解决这些问题呢?允许要求每次调用都.Sort()
使用单独的 IComparer 实例,因为我看不到任何其他方法可以做到这一点:必须使用其他一些真正随机的值来比较项目,但该值也必须与项目一致在给定的排序操作中。
我在这里有一个开始,但它是匆忙发布的,非常慢,甚至没有返回所有可能的类型(测试表明它至少消除了偏见,如果你不计算缺失的选项)。我不希望像 Fisher-Yates 那样的 O(n) 性能,但我确实想要一些合理的东西(n log n 表示小的 n),我确实希望它能够显示所有可能的类型。不幸的是,该链接是该问题的当前公认答案,因此我希望能够用更好的东西替换它。
如果不出意外,我希望这能吸引所有那些寻找 IComparable 解决方案的谷歌查询——他们最终会在这里而不是在其他地方告诉他们使用不正确的版本。
vb.net - SortedList 未按键排序 - VB.NET
我需要要排序的键值对,所以我决定使用 SortedList 而不是 HashTable。
我按以下顺序将数据添加到我的 SortedList 中,这是我需要的顺序
键是字符串,值是对象列表。键表示一个时隙,该时隙由两个整数值连接并由“-”分隔。“700”作为一个字符串,最初是一个整数 0700。
例如
但是一旦将这些键值对添加到 SortedList 中,它们就会按顺序出现
不幸的是,我将时隙作为两个无法更改的整数值接收。
有没有办法强制对 SortedList 进行排序?或者这个问题是因为我存储密钥的方式?有没有更好的存储方法?
arrays - List.Sort IComparer 性能
我正在尝试对一对 int 数组进行排序 (int[] a; int[] b;)
如果我使用 Array.Sort(a,b) 那么性能很棒。
但是,我更喜欢使用 List<> 并将 int 对加载到结构中。我可以使用带有重载的 Array.Sort() 来实现它,该重载为结构提供了一个简单的比较器,但它比 Array.Sort(a,b) 慢了大约 4 倍
这正常吗?
c# - 使用自己的 IComparer使用 Linq OrderBy
我有一个通用的
whereMyClass
有一个InvoiceNumber
包含以下值的属性:
200906/1
200906/2
..
200906/10
200906/11
200906/12
我的列表绑定到
支持使用 linq 进行排序:
然而,默认的比较器排序(如假设的那样)如下:
200906/1
200906/10
200906/11
200906/12
200906/2
在这种情况下这是令人讨厌的。
现在我想用我自己IComparer<T>
的。它看起来像这样:
并更改ApplySortCore
代码以使用它IComparer
:
当我调试我的代码时,我看到它MyComparer.Compare(object, object)
被多次调用并为比较方法返回正确的值(-1、0、1)。
但是我的列表仍然以“错误”的方式排序。我错过了什么吗?我没有线索。
c# - 修改 List.Contains 行为
我有一个List<MyObj>
与class MyObj : IComparable
. CompareTo
我在每个接口的MyObj
类中编写了方法IComparable
,但是当我使用它时,它应该List<MyObj>.Contains(myObjInstance)
返回。false
true
我不确定我是否理解我需要如何继续以确保在调用 then函数List
时使用我的自定义比较方法。Contains
这是我的 compareTo 实现:
注意 Symbol 属性是一个字符串。
为了澄清,我在 compareTo 方法中设置了一个停止点,它甚至没有进入那里。
有人试过吗?
谢谢。
c# - 用于列表(排序)的自定义 IComparer 的问题 - c#
谁能帮忙,我做排序有问题,我以为我已经排序但似乎没有工作。
我有一个存储以下值的列表
8,6,10,11,7
我还有另一个列表(我的类中的附件,它有一个名为 accessoryId 的属性,当前类的 id 顺序为 6、7、8、10、11)
因此,我需要将它们从 6、7、8、10、11 排序到简单列表中使用的顺序,即 8、6、10、11、7
我有我的 icomparable (见下文),我这样打电话 - 它确实输入但有问题,因为列表仍然包含我的所有课程,但仍按 6、7、8、10、11 的顺序
.net - 有状态的 IComparer 是否存在合理的场景?
我从来没有用IComparer<T>
默认构造函数写过有状态的。我在 Reflector 中检查的所有标准库实现也是无状态的。因此,我想假设我可以IComparer<T>
像这样自由地缓存:
代替
所以这里有一个问题:你有没有写过/看过一个IComparer<T>
这会崩溃的?如果是,它有多普遍?
编辑:在这种情况下,我真的不想要第二个版本的开销的原因是数据结构是持久的。它被实现为一棵树,其中节点没有父/根引用。所以它不是每个队列对比较器的一个引用,而是每个节点对比较器的一个引用!我最初的设计只是使用IComparable<T>
并建议编写一个包装结构来进行自定义比较。