问题标签 [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.

0 投票
4 回答
8432 浏览

c# - 如何让我的通用比较器 (IComparer) 处理空值?

我正在尝试编写一个用于排序的通用对象比较器,但我注意到它不处理它比较的值之一为空的实例。当一个对象为空时,我希望它像空字符串一样对待它。我尝试将 null 值设置为 String.Empty,但是在调用 CompareTo() 时出现“对象必须是字符串类型”的错误。

我现在很坚持这个!任何帮助,将不胜感激。

0 投票
4 回答
23385 浏览

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 很笨重:

这允许二进制搜索按如下方式工作:

呸。有没有更清洁的方法?

0 投票
1 回答
377 浏览

wpf - 使用 Icomparer 对特殊条件进行排序

在我的项目中,我需要对 datagrid 列进行排序,但如果某个条件适用于某个项目,它应该位于排序列表的顶部(第一项)。否则,如果该条件不适用于任何项目,则它应该是简单的排序列表。

我尝试使用排序事件并定义 iComparer,但我无法获得所需的行为。我将在 Icomparer 中放入什么代码,以便它可以在顶部返回条件为 true 的项目,并以排序方式返回其余项目。

请有人帮忙

0 投票
1 回答
687 浏览

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>'

不是CustomObjectComparerSystem.Collections.Generic.IComparer

0 投票
5 回答
2365 浏览

c# - 数组列表排序

我有一个包含大量字符串的 ArrayList。它需要根据NameAgeAmt三个字段(基本上是三个子字符串)进行就地排序。Age是第一个子字符串(位置 0-3),Name是第二个(3-6),Amt是最后一个(6-10)。这些参数的排序顺序非常重要,如下所示:

首先按Name执行升序排序,然后按Age升序排序(实际上在子字符串中更早),然后按Amt降序排序。就是这样。

我有这门课

我使用它仅基于一个字段进行排序 - 通过调用命名

这让我可以根据该字段正确排序。问题是如何修改此代码以允许我根据所有三个AT ONCE以正确的顺序并使用正确的 asc/desc 模式进行排序?

任何代码或提示将不胜感激。(顺便说一句,如果您想知道List<T>在这个项目中使用泛型不是一个选项)。

0 投票
1 回答
1082 浏览

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

0 投票
2 回答
798 浏览

.net - 当 Array.Sort 调用 x.CompareTo(x) 时,IComparer 没有返回零

我已经实现了一个 IComparer 来对搜索页面上的结果进行排序。有时,在生产中,用户会收到此错误。搜索的所有数据(条件、分页、排序)都在查询字符串上,我使用的是 ELMAH 库,因此我可以在错误的电子邮件报告中看到详细信息。如果我将出现错误的用户的查询字符串复制到我的浏览器中,该页面就可以正常工作。所以这显然是不确定的。

这是我的比较器:

所以基本上,按到期日期降序排序,然后按标题升序排序。有什么明显的问题吗?

0 投票
1 回答
754 浏览

wpf - 如何以最后的空字符串按字母顺序对WPF GridView进行排序?

我有一个包含多列的 ListView (GridView),到目前为止,我可以按列按字母顺序对其进行排序,但是当我对 AZ 进行排序时,顶部会显示空字符串。我想把这些移到最后。我想我已经设法制作了一个 IComparer,它会将空字符串放在最后,但我不知道如何让我的 ListView 使用它。顺便说一下,这是我制作的比较器:

0 投票
3 回答
270 浏览

c# - 字符串的自定义比较器是否应该允许空值

我正在查看其他人的代码,用于比较字符串的自定义比较器。

我注意到如果至少有一个字符串参数为空,它会翻倒。

比较根据比较结果返回 -1、0 或 1。

是否应该修复这样的代码来处理空值,如果是这样,如果其中一个参数为空,它应该返回什么?

0 投票
1 回答
1237 浏览

c# - IEqualityComparer 和单例

我想知道是否有可能在例如 Distinct 中使用单例作为 comparerObject ?

假设我有一个元素列表,我需要在该列表上使用 distinct 函数。通常我会这样做

ListElementComparer 是一个实现 IEqualityComparer 接口的类。但是,让我们假设我会经常使用上面提到的代码,例如那种方式。

因此,您可以创建很多次 ListElementComparer 对象。在这种情况下,在每次迭代中使用单调创建 ListElementComparer 是否有任何意义?如果我使用单例,不同的方法会起作用吗?