问题标签 [icomparable]

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 投票
2 回答
9622 浏览

.net - 如何使用 IComparable 之类的东西自然地对 DataView 进行排序

我的 DataView 表现得很有趣,它按字母顺序对事物进行排序,我需要它对事物进行数字排序。我已经在整个网络上查找了这个,并发现了许多关于如何使用 ICompare 对其进行排序的想法,但没有什么真正可靠的。

所以我的问题是

  1. 如何在 DataView 上实现 ICompare(在此处查找代码)。
  2. 如何正确地从一列充满实际字符串的字符串和一列充满数字(带逗号)的列中破译。

我需要代码来帮助我解决这个问题。我或多或少迷失了 ICompare 的想法以及如何在不同的场景中实现,所以一个好的解释会很好。

另外,请不要给我链接。我正在寻找关于这个的可靠答案。

我使用的一些代码。


对于该场景,我动态构建了一个数据表并将其推入一个数据视图中,在该数据视图中我将数据视图放入一个网格视图中,同时还记得将数据视图放入一个会话对象中以实现排序功能。

当用户调用 gridview 对列进行排序时,我会调用 session 对象中的 dataview 并构建 dataview 排序表达式,如下所示:

或类似的规定。所以通常出现的结果适用于所有真实字符串,例如

车; 家; 斯科特; 扎克之类的……

但是,当我对带有逗号分隔值的数字字段执行相同操作时,它会出现类似

900; 800; 700; 600; 200; 120; 1,200;12,340;1,000,000;

明白了吗?它只是将项目排序为 alpha 排序而不是自然排序。我想让我的 Dataview 自然正确地对数字列进行排序

120; 200; 600; 700; 800; 900; 1,200;12,340;1,000,000;

让我知道你能做些什么来帮助我。
PS我浏览了无数关于如何做到这一点的文章,他们都说要塞入一个列表/数组并这样做,但是有没有更有效的方法?

0 投票
2 回答
1634 浏览

.net - 如何对 DataView 进行自然/数字排序?

我想知道如何自然地对 DataView 进行排序......我真的需要帮助。我在那里找到了可以使用 IComparable 进行列表的文章,但我需要对我的数据视图中的数字进行排序。

它们目前是 alpha 排序的,因为它们是带有“逗号”的数字。请帮帮我。

我想找到一些东西,而不是花时间自己创造。

PS 表达式和 sortdirection 有效,但它们当然是 Alpha 排序。请帮忙。

0 投票
3 回答
973 浏览

c# - C#拳击题

首先,举两个例子:

现在,我猜测为什么第二个不起作用是因为拳击。此代码背后的目的是实现IComparable. 我需要一些方法来将一个对象强制转换为 long 或 ulong ,或者如果两者都不是,而不是抛出错误。我不想对每种基本数字类型(字节、整数、长整数、ubyte 等)实施检查,我宁愿只以最大的数字类型捕获它们并以这种方式处理。这里所有聪明人的想法?我怎样才能拆箱对象,最好避免反射,但我想如果这是唯一的方法......或者我应该不实现的非泛型版本IComparable

编辑:

这似乎可行,但似乎是解决问题的可怕技巧。只有我吗?

0 投票
1 回答
2054 浏览

.net - 将双精度数组转换为 IComparable 数组

我正在尝试使用 VB.NET 创建一个 Quicksort 基类,并将其作为一组 IComparable 元素。签名如下所示:

但是,当我传入一个双精度数组时,编译器会给我错误。

错误是:

.NET 文档说明 double 的实现 IComparable。为什么 .NET 编译器不让我这样做?

0 投票
1 回答
447 浏览

c# - 比较通用字段

我有一些通用类型,如下所示:

这些理论上应该能够将自己与相同类型的其他值进行比较,以便我可以编写以下类型的代码:

不幸的是,我的代码中有一个错误,然后问题就变成了如何正确地做到这一点。

该错误与我的 CompareTo> 实现有关,它基本上如下所示:

HelperMethods.CompareTwoFields 看起来像这样:

最后一个 if 语句有一些我现在用来修复错误的东西,但这是正确的吗?

基本上,我如何比较两个 Type 对象?除了将它们转换为字符串并进行比较之外,这些是否有有意义的比较?

0 投票
6 回答
29562 浏览

c# - 如何使用 IComparable 接口?

我需要一个关于如何使用IComparable界面的基本示例,以便我可以按升序或降序以及我正在排序的对象类型的不同字段进行排序。

0 投票
8 回答
31442 浏览

.net - 何时使用 IComparable比。比较器

我试图弄清楚我需要实现哪些接口。他们基本上都做同样的事情。我什么时候会使用其中一个?

0 投票
2 回答
453 浏览

fxcop - FxCop 和 IComparable/IComparable

我目前正在调查在我们现有的一个项目中使用 FxCop 并得到一个奇怪的结果。

输出显示了少量违反“可比较类型上的覆盖方法”规则的情况,说明“'Log' 应该覆盖 Equals,因为它实现了 IComparable。”

这有两个问题:

  1. 我以为只有在实现的CompareTo时候才需要实现IComparable(MSDN自己证实了这一点)
  2. 该类未实现IComparable,但IComparable<T>确实将 CompareTo 隐含为强类型。

所以 FxCop (1.36) 摇摇晃晃,还是我的理解在这里不正常..?

提前致谢。

0 投票
3 回答
1283 浏览

f# - F# 使用自定义类设置

我正在尝试将 Set 操作与我拥有的类一起使用。此类的每个实例都有一个唯一的 ID。我是否需要实现 System.IComparable 接口,如果需要,我该怎么做?

0 投票
5 回答
2314 浏览

c# - IComparable 的接口约束

当我想限制类型 T 具有可比性时,我应该使用:

或者

如果#2有意义,我无法理解。任何人都可以解释有什么区别?