问题标签 [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.
c# - 如何让我的通用比较器 (IComparer) 处理空值?
我正在尝试编写一个用于排序的通用对象比较器,但我注意到它不处理它比较的值之一为空的实例。当一个对象为空时,我希望它像空字符串一样对待它。我尝试将 null 值设置为 String.Empty,但是在调用 CompareTo() 时出现“对象必须是字符串类型”的错误。
我现在很坚持这个!任何帮助,将不胜感激。
c# - C# lambda 表达式和 IComparer
我正在使用 lambda 表达式在 C# 中对数组进行排序和搜索。我不想在我的类中实现 IComparer 接口,因为我需要对多个成员字段进行排序和搜索。
虽然排序工作正常,但二进制搜索给出了编译错误Cannot convert lambda expression to type 'System.Collections.IComparer<Widget>' because it is not a delegate type。出于某种原因,Sort 对 IComparer 和比较都有重载,但 BinarySearch 仅支持 IComparer。经过一番研究,我发现ComparisonComparer<T>
将比较转换为 IComparer 很笨重:
这允许二进制搜索按如下方式工作:
呸。有没有更清洁的方法?
wpf - 使用 Icomparer 对特殊条件进行排序
在我的项目中,我需要对 datagrid 列进行排序,但如果某个条件适用于某个项目,它应该位于排序列表的顶部(第一项)。否则,如果该条件不适用于任何项目,则它应该是简单的排序列表。
我尝试使用排序事件并定义 iComparer,但我无法获得所需的行为。我将在 Icomparer 中放入什么代码,以便它可以在顶部返回条件为 true 的项目,并以排序方式返回其余项目。
请有人帮忙
c# - C# 列表使用 IComparer 参数排序会产生编译错误
有人可以向我解释这应该如何工作吗?我遵循了在http://msdn.microsoft.com/en-us/library/234b841s.aspx找到的 MSDN 示例。
我已经制作了自己的 CustomObject 并为它制作了一个比较器。
这是CustomObjectComparer
课程:
然后,当我有一个List<CustomObject>
并尝试执行以下操作时,我会遇到编译错误。
错误:
Argument 1: cannot convert from 'CustomObjectComparer' to 'System.Collections.Generic.IComparer<CustomObject>'
不是CustomObjectComparer
吗System.Collections.Generic.IComparer
?
c# - 数组列表排序
我有一个包含大量字符串的 ArrayList。它需要根据Name、Age和Amt三个字段(基本上是三个子字符串)进行就地排序。Age是第一个子字符串(位置 0-3),Name是第二个(3-6),Amt是最后一个(6-10)。这些参数的排序顺序非常重要,如下所示:
首先按Name执行升序排序,然后按Age升序排序(实际上在子字符串中更早),然后按Amt降序排序。就是这样。
我有这门课
我使用它仅基于一个字段进行排序 - 通过调用命名
这让我可以根据该字段正确排序。问题是如何修改此代码以允许我根据所有三个AT ONCE以正确的顺序并使用正确的 asc/desc 模式进行排序?
任何代码或提示将不胜感激。(顺便说一句,如果您想知道List<T>
在这个项目中使用泛型不是一个选项)。
linq - 如何在 LINQ 中使用 Distinct() 以及如何传递自己的比较器
我正在查询一个名为 STUDENT 的表。我想检索 2 个值,即 STUDENT_ID 和 TIME(两者都是字符串)。但是,我只想要 STUDENT_ID 的不同值。当我使用只有 STUDENT_ID 的 Distinct() 时,我确实得到了唯一值。但是在我包含 TIME 的那一刻,所有的值都会显示出来,因为表中的时间都是不同的。我还尝试创建自己的 Comparer 类,并将一个实例传递给 Distinct()。
但是,我得到 4 个错误。
1)。有没有办法在 2 个值上使用不同的值?(因为如果它只是 STUDENT_ID 它会排序)我希望它显示 STUDENT_ID 的唯一值并显示相应的 TIMES。
或者.. 2. 我如何制作一个有效的比较器?我收到以下错误。
一个。错误 1 'System.Linq.IQueryable' 不包含 'Distinct' 的定义,并且最佳扩展方法重载 'System.Linq.ParallelEnumerable.Distinct(System.Linq.ParallelQuery, System.Collections.Generic.IEqualityComparer)' 有一些无效参数 C:\Users\KC\Desktop\SoulScanner\SoulScanner\SearchByTime.xaml.cs 360 23 SoulScanner
湾。错误 4 参数 1:无法从 'System.Collections.Generic.IEnumerable' 转换为 'System.Linq.IQueryable' C:\Users\KC\Desktop\SoulScanner\SoulScanner\SearchByTime.xaml.cs 363 43 SoulScanner
C。错误 2 实例参数:无法从 'System.Linq.IQueryable' 转换为 'System.Linq.ParallelQuery' C:\Users\KC\Desktop\SoulScanner\SoulScanner\SearchByTime.xaml.cs 360 23 SoulScanner
d。错误 3 'SoulScanner.dgvRecords.dgvRecords(System.Linq.IQueryable)' 的最佳重载方法匹配有一些无效参数 C:\Users\KC\Desktop\SoulScanner\SoulScanner\SearchByTime.xaml.cs 363 28 SoulScanner
.net - 当 Array.Sort 调用 x.CompareTo(x) 时,IComparer 没有返回零
我已经实现了一个 IComparer 来对搜索页面上的结果进行排序。有时,在生产中,用户会收到此错误。搜索的所有数据(条件、分页、排序)都在查询字符串上,我使用的是 ELMAH 库,因此我可以在错误的电子邮件报告中看到详细信息。如果我将出现错误的用户的查询字符串复制到我的浏览器中,该页面就可以正常工作。所以这显然是不确定的。
这是我的比较器:
所以基本上,按到期日期降序排序,然后按标题升序排序。有什么明显的问题吗?
wpf - 如何以最后的空字符串按字母顺序对WPF GridView进行排序?
我有一个包含多列的 ListView (GridView),到目前为止,我可以按列按字母顺序对其进行排序,但是当我对 AZ 进行排序时,顶部会显示空字符串。我想把这些移到最后。我想我已经设法制作了一个 IComparer,它会将空字符串放在最后,但我不知道如何让我的 ListView 使用它。顺便说一下,这是我制作的比较器:
c# - 字符串的自定义比较器是否应该允许空值
我正在查看其他人的代码,用于比较字符串的自定义比较器。
我注意到如果至少有一个字符串参数为空,它会翻倒。
比较根据比较结果返回 -1、0 或 1。
是否应该修复这样的代码来处理空值,如果是这样,如果其中一个参数为空,它应该返回什么?
c# - IEqualityComparer 和单例
我想知道是否有可能在例如 Distinct 中使用单例作为 comparerObject ?
假设我有一个元素列表,我需要在该列表上使用 distinct 函数。通常我会这样做
ListElementComparer 是一个实现 IEqualityComparer 接口的类。但是,让我们假设我会经常使用上面提到的代码,例如那种方式。
因此,您可以创建很多次 ListElementComparer 对象。在这种情况下,在每次迭代中使用单调创建 ListElementComparer 是否有任何意义?如果我使用单例,不同的方法会起作用吗?