问题标签 [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 投票
3 回答
3628 浏览

c# - 将字符串数组排序为 Int

有没有办法使用 IComparer 和 ArrayList.Sort() 将一组字符串排序为整数?

0 投票
6 回答
7457 浏览

c# - “无法转换为 IComparer”

我为盒装的 RegistryItem 对象定义了以下 IComparer:

我想用它来对盒装 RegistryItems 的 ArrayList 进行排序(它确实应该是一个 List <RegistryItem>,但这不在我的控制范围内)。

但是,最后一行给出了编译器错误:“无法从 BoxedRegistryItemComparer 转换为 System.Collections.IComparer”。如果有人能指出我的错误,我将不胜感激。

0 投票
3 回答
1230 浏览

asp.net - 对 Listview 进行反向排序(使用 Comparer 类)

我有一个链接到 Datapager 的两列 ListView。ListView 列出了特定目录中特定类型的所有文件,因此数据源是 FileInfo 类型的 ArrayList。因此,我必须创建一个 Comparer 类以在 ArrayList.Sort 方法中使用。

文件信息比较器.vb:

GenerateSortedArray 子:

ListView_排序:

所有这一切都很好,但是,我不知道如何反转排序。从代码中可以看出,我已经确定了排序方向,但我不知道如何使用它来反转排序。

有什么想法吗?

0 投票
2 回答
1138 浏览

c# - 这个自定义比较功能有什么问题

我试图调试一个问题并遇到了这个问题。也许有人可以向我解释。这是有问题的代码

我得到的错误是:当 Array.Sort 调用 x 时,IComparer(或它所依赖的 IComparable 方法)没有返回零。比较(x)。

更有趣的是,如果我在调试模式下从 VS 运行它,则不会发生错误。仅当我将其置于发布模式并点击“不调试就开始”时。有人知道为什么会发生这种情况吗?我通过添加“if(rt1 == rt2) return 0;”解决了这个问题 行到函数的开头,但真的很想知道发生了什么。

额外信息:是的,这实现了 IComparer 类

0 投票
1 回答
1102 浏览

subsonic - 将 OrderBy 与带有 SubSonic 的自定义 IComparer 一起使用

我正在尝试在 SubSonic 上OrderBy()使用自定义调用,如下所示:IComparerIQueryable

但是,当我尝试枚举sortedFoos或创建一个PagedList<FooObject>使用它时,我得到一个 System.Exception:“不支持 MemberInit 类型的 LINQ 表达式节点”。

这是以下的实现FooObjectComparer

(这是一个用于调试目的的简单实现。实际实现会更复杂)。

我在这里想念什么?

0 投票
2 回答
840 浏览

c# - 更改 ListBox 的比较器

我有一个包含工作项列表(来自 TFS)的列表框。我想添加要选择的项目,但无法将项目标识为相同。

这是我的代码

当传入的 WorkItem 来自 SelectedItems 列表中的同一查询时,这非常有用。但是,如果它来自不同的查询(即对象引用不同),则它不能正确识别对象。

我认为它是在参考比较。我想覆盖它并让它在 item.Id 上进行比较。有没有办法做到这一点?

请注意,我使用的是WPF ListBox,而不是WinForms ListBox

0 投票
5 回答
7516 浏览

c# - 使用比较器按不同字段对 C# 中的 IEnumerable 进行排序

我有一个对象列表,需要根据对象的三个不同属性对其进行排序。例子

结束列表应该是 Property1 = true 的对象,然后是 Property2 = true 的对象,然后是 Property3 = true 的对象

0 投票
3 回答
734 浏览

c# - 在 CompareTo() 覆盖中有效地禁用 Sort()?

我的类的CompareTo()方法是动态的,范围可以从简单的比较到多列的比较。这一切都是在运行时确定的,而且效果很好。

但在某些情况下,我希望尝试使用默认比较对我的对象集合进行排序,而不是什么都不做。

CompareTo()我惊讶的是,任何比较都返回 0 是行不通的。该列表以某种奇怪的、看似随机的顺序重新排列。

有没有办法在CompareTo()方法实现中做到这一点?我宁愿不通过重写 Sort() 在集合级别处理这个问题。

0 投票
4 回答
654 浏览

c# - 优化 bin 放置算法

好的,我有两个集合,我需要将 collection1 中的元素放入 collection2 的 bin(元素)中,具体取决于它们的值是否在给定 bin 的范围内。

举一个具体的例子,假设我有一个排序的集合对象(bins),它有一个 int 范围([1...4]、[5..10] 等)。我需要确定 int 的范围,并将其放在适当的 bin 中。

所以明显的 NxM 复杂度算法就在那里,但我真的很想看到 Nxlog(M)。为此,我想使用 BinarySearch 代替内部 foreach 循环。要使用 BinarySearch,我需要实现一个 IComparer 类来为我进行搜索。我遇到的问题是这种方法需要我创建一个 IComparer.Compare 函数来比较两种不同类型的对象(一个元素到它的 bin),这似乎不可能或不正确。所以我在问,我应该如何编写这个算法?

0 投票
5 回答
2545 浏览

c# - 比较对象的不同实现的优点/缺点

这个问题涉及基本相同代码的两种不同实现。

首先,使用委托创建一个比较方法,该方法可以在对对象集合进行排序时用作参数:

当我想以一种与我的 CompareTo 函数提供的方式不同的方式对 Foo 对象集合进行排序时,我会使用上述方法。例如:

二、使用IComparer:

当我想在 Foo 对象集合中对 Foo 对象进行二进制搜索时,我使用上述方法。例如:

我的问题是:

  • 这些实现中的每一个的优点和缺点是什么?
  • 还有哪些方法可以利用这些实现中的每一个?
  • 有没有办法以不需要复制代码的方式组合这些实现?
  • 我可以只使用其中一种实现来实现二进制搜索和替代集合排序吗?