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

c# - 如何为 SortedDictionary 使用自定义 IComparer?

我在为我的 SortedDictionary<> 使用我的自定义 IComparer 时遇到了困难。目标是将电子邮件地址以特定格式(firstnam.lastname@domain.com)作为键,并按姓氏排序。当我做这样的事情时:

我得到这个 ArgumentException: An entry with the same key already exists.添加第二项时。

我以前没有为 SortedDictionary 使用过自定义 IComparer,我看不到我的错误,我做错了什么?

0 投票
1 回答
465 浏览

linq - 具有许多属性的类的 IEqualityComparer 既没有唯一值

IEqualityComparer这个类如何实现?

ID 属性不是唯一的。这两个属性都没有唯一值。

该实体有 7 个属性。

0 投票
8 回答
59778 浏览

linq - 传递一个 lambda 表达式来代替 IComparer 或 IEqualityComparer 或任何单一方法接口?

我碰巧看到了一些代码,其中这个人将 lambda 表达式传递给 ArrayList.Sort(IComparer here) 或 IEnumerable.SequenceEqual(IEnumerable list, IEqualityComparer here),其中需要 IComparer 或 IEqualityComparer。

我不确定我是否看到了它,或者我只是在做梦。而且我似乎无法在这些集合中找到任何接受 Func<> 或方法签名中的委托的扩展。

有这样的重载/扩展方法吗?或者,如果没有,是否有可能像这样乱七八糟地传递一个算法(读取委托),其中需要一个单方法接口?

更新 谢谢大家。我也那么认为。我一定是在做梦。我知道如何编写转换。我只是不确定我是否看到过类似的东西,或者只是认为我看到过。

另一个更新 看,在这里,我发现了一个这样的例子。毕竟我不是在做梦。看看这家伙在这里做什么。是什么赋予了?

这是另一个更新: 好的,我明白了。这家伙正在使用Comparison<T>超载。好的。很好,但很容易误导你。不过不错。谢谢。

0 投票
2 回答
1999 浏览

c# - IComparable 和 OrderBy。尝试用 C# 对扑克牌进行排序

我正在尝试创建一个分析扑克手的简单程序。给定 n 手/玩家和公共牌(德州扑克),我想确定获胜者。但是,当我有两个确切的结果时,我的测试失败了——它只返回一个获胜者。即手牌结果包含 JJ 9 9 K,对于两个玩家,但我的获胜者列表包含一个。

我在这里发帖有几个原因。显然,第一个是这里有什么明显的错误吗?这是实现排序的好方法(我看不出分开排序的理由),是否有更好的方法,为什么?

我有一个DetermineWinners 方法,它正在对玩家的HandResult 执行订单:

这是我的手结果类:

GetCardResult 方法简单地返回卡片的整数表示,即 1 到 14。这是 HandRanking 枚举:

这是 HandRanking 枚举上的 GetGrouping 扩展。它用于在比较值时帮助遍历卡片:

非常感谢您的帮助。

编辑:我对 CompareTo_Equal、CompareTo_LessThan 和 CompareTo_GreaterThan(使用我的运算符重载)的测试成功,结果分别为:0、-1 和 1。我相信这是我的 Linq.OrderByDescending 实现的问题。我想这只是使用 CompareTo 实现,我错了吗?

0 投票
4 回答
950 浏览

c# - C# 比较器标准用法问题

我对这是否是在 C# 中使用 IComparer 的标准有疑问。假设我有一个情况,其中有三个 Person 对象:P1、P2 和 P3。假设我调用了传入 P1 和 P2 的 Compare 方法,结果为 0。这实质上意味着应该将两个人归类为相等。现在假设我调用了传入 P2 和 P3 的 Compare 方法,结果也是 0。同样,这意味着两个人是平等的。从逻辑上讲,可以假设 P1 和 P3 也相等;但是,Compare 方法可以实现,但是有人决定实现它。那么在这种情况下,以 P1 和 P3 也返回 0 的方式实现它是否是一种标准?

这是我要问的代码:

0 投票
3 回答
2965 浏览

c# - LINQ orderby vs IComparer

我想知道什么更好用。

IComparer 类和用于 List 上的排序或 LINQ orderby 的比较方法。两者都可以正常工作,但哪一个更适合大型列表。

0 投票
9 回答
2081 浏览

c# - 如何在 IComparer.Compare 方法上将“对象”转换为类类型

我正在实施

int IComparer.Compare(object x, object y);

从 IComparer 界面。我知道对象属于 Class1 类型,并且我知道它的成员之一是 class1Instance.myDate,属于 DateTime 类型。

我想要做的是类似的事情:

但是这种方式铸造是行不通的。是否有以下替代方案?

0 投票
1 回答
158 浏览

.net - 有什么两个Interface(Icomparable,Icomparer)可以比较?

可能重复:
何时使用 IComparable<T> Vs。比较器<T>

而 IComparer 适用于这两种情况。

0 投票
1 回答
665 浏览

asp.net - Icomparer 实现上的错误。请帮忙 !

我创建了一个数组排序器来对 DNN 模块中的 Win Explorer 中的数组进行排序。如对预览问题的回答:

对文件夹名称的数组进行排序,如 Windows Explorer(按数字和字母顺序) - VB.NET

用户在运行模块时会收到以下错误(如下),我不是特别经验丰富的 ASP.NET 开发人员。是否因为我在 IComparer 中使用了StrCmpLogicalW并且正在不支持 StrCmpLogicalW 的平台上使用而导致此错误。还是因为权限问题造成的。

任何帮助都非常感谢,

非常感谢。

这是导致错误的分拣机。

这是异常堆栈跟踪:

InnerException:无法比较数组中的两个元素。

消息:DotNetNuke.Services.Exceptions.PageLoadException:无法比较数组中的两个元素。---|> System.InvalidOperationException:无法比较数组中的两个元素。---|> System.Security.SecurityException: System.Security.Permissions.SecurityPermission at Nukeville.Modules.SkinLab.View.nvSorter.Compare(String x, String y) at System.Collections.Generic.ArraySortHelper 1.SwapIfGreaterWithItems(T[] keys, IComparer1 比较器,Int32 a , Int32 b) 在 System.Collections.Generic.ArraySortHelper 1.QuickSort(T[] keys, Int32 left, Int32 right, IComparer1 比较器) 在 System.Collections.Generic.GenericArraySortHelper 1.Sort(T[] keys, Int32 index, Int32 length, IComparer1 比较器) 失败的第一个权限的类型是: System.Security.Permissions.SecurityPermission 失败的程序集的区域是:MyComputer --- 内部异常堆栈跟踪结束 --- 在 System.Collections.Generic.GenericArraySortHelper1.Sort(T[] keys, Int32 index, Int32 length, IComparer1 个比较器)在 System.Array.Sort[T](T[] 数组,Int32 索引,Int32 长度,IComparer1 comparer) at System.Array.Sort[T](T[] array, IComparer1 个比较器)在 Nukeville.Modules.SkinLab.View.GetJavaFolderArrays(String RootPath) 在 Nukeville.Modules.SkinLab.View.Page_PreRender(Object s,在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control 的 System.Web.UI.Control.OnPreRender(EventArgs e) 的 EventArgs e)。 PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() ) 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Page。ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- 内部异常堆栈跟踪结束 ---

0 投票
3 回答
8193 浏览

c# - 如何相互比较多个对象值?

假设我有一个对象,其中包含以下值(另请注意,我不希望为此使用日期时间对象,仅使用以下值,我希望在比较器本身中解决此问题):

如何将我的比较器中的所有这些多个值相互比较,以便它们根据日期列出?

然后我希望创建一个 Comparer.cs 类:

}