问题标签 [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 回答
597 浏览

c# - 比较 3 个对象

我正在用 C# 编写通用二叉树。

在我的应用程序的一部分中,我需要按距离排序。

从 A 到 C 和 B 到 C。

像这样的东西:

但问题是,我只能在 2 个对象之间进行比较……而且我需要某种比较器。

创建像“开始和结束之间的距离”这样的类是正确的解决方案吗?我认为它产生了太多的垃圾。

有什么解决办法吗?谢谢 ;-)

编辑:

我没有工作的 IComparer...

编辑:

问题解决了,现在我有一个工作的 IComparer!

谢谢 ;-)

0 投票
5 回答
376 浏览

c# - 为动态比较实现 IComparable

我必须Circle从 a 中获取 aList<Circle>取决于当前MousePosition

这是Circle类

这是我从列表中检索圆圈的方式

这适用于小列表,但随着列表的增长,它会变得越来越慢。我想我可以使用 List.BinarySearch 来获得更好的性能,但我不知道如何IComparable在这种情况下实现。

0 投票
1 回答
11798 浏览

c# - INT 的“至少一个对象必须实现 IComparable”?据我所知,确实

好的,我有一个简单的IEnumerable<HtmlString> things,我想把它分成四个相等的组。

应该做的伎俩,但相反我得到了这个时髦:

“/”应用程序中的服务器错误。至少一个对象必须实现 IComparable。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:至少一个对象必须实现 IComparable。

第 36 行:int Quarter = things.OrderBy(t => t.Foo).Count() / 4;

有人知道这里到底发生了什么吗?为什么我需要实现 IComparable 来获得简单的计数?

0 投票
1 回答
886 浏览

c# - C# - 字典> 排序抛出 System.ArgumentException

我有一个未排序的Dictionary<int, Dictionary<int, string>>,当试图对其值的键进行排序时,它的抛出System.ArgumentException: At least one object must implement IComparable.如下是函数,

我附上了下面的数据屏幕截图,您可以在其中看到未排序的键,这样您就知道我想要实现的目标,我做错了什么,我需要您的指导,谢谢

在此处输入图像描述

0 投票
2 回答
137 浏览

c# - 将泛型类绑定到特定接口

我正在尝试制作一个通用类。有没有办法进行约束,以便只有实现的对象IComparable才能传递到我的泛型中。例如:

希望我的例子很清楚。我只想MyClass<T>允许实现IComparable. where如果我没记错的话,我知道该约束仅适用于类。这是可能的还是有人可以提供解决方法?

0 投票
3 回答
295 浏览

c# - 我必须实现哪些接口才能创建列表或字典连接两个值作为键

我需要使我的自定义对象在字典、列表等中正常工作......这样我就可以更改对象的属性,并允许它被使用,而不是孤立。

上次我尝试覆盖 GetHashCode() 时,当我将对象添加到字典时,我孤立了对象,对对象进行了更改(更改了 GetHashCode),这以某种方式导致字典无法正确地从内存中处理对象。

问题

有人可以解释一下:

  • 我需要在 TrustedEntityReference 中覆盖哪些接口和接口才能连接intTrustedEntity在排序字典中正常工作?

  • 对于 .NET 字典对象中使用的内容,哪些值决不能更改,否则会冒着孤立对象的风险?(例如,更改对象发出的哈希码可能会导致字典出现 GC 问题)

这是我正在处理的当前示例对象。

0 投票
3 回答
2000 浏览

c# - C# 泛型类和 EqualityComparer

谁能解释一下以下类声明中有什么问题:

编译器在我使用 EqualityComparer 的那一行抱怨。错误如下:

错误 CS0176:无法使用实例引用访问静态成员 `object.Equals(object, object)',而是使用类型名称对其进行限定

我看不到我在哪里使用实例引用。


对不起,我的错。我发布了一个不完整的问题。为了完整起见,标识符类如下:

在那里使用 EqualityComparer 是由于复制和粘贴错误(对不起,今天的通用代码太多)。

当然我的问题是错误的,因为我没有给你所有你需要回答的元素(我很快就会删除它)。我IType需要IConvertible。总之谢谢大家。

0 投票
1 回答
9865 浏览

c# - 此 Icomparer 中导致空引用的不一致在哪里?

我在我的自定义 IComparer 实现中收到一个空对象,尽管它所应用的集合中没有空条目。我的理解是这可能是由 IComparer 实现中的不一致引起的。我无法在以下代码中发现这可能发生的位置。

作为参考,目的是这些首先按“正确”属性排序,然后如果它们相同,则根据“tiebreakerDelta”属性进行排序,该属性最接近零排序而不会超过。

感谢您提供的任何帮助!

编辑:我确定这不是一个真正的空引用,它是由一些不一致引起的。此外,有时会显示此错误文本以确认 -

不幸的是,断点对我没有帮助。

编辑:这是一个简短的示例,其中 ResultsLineViewModel 实现了 IFoolsSortable 接口:

正确的排序是: Line1, line3, line2, line4

0 投票
3 回答
712 浏览

c# - 使用列表加速算法.Sort 和 IEnumerable

对于我的项目,我首先从文件中加载图像,并将每个像素放入二维pixels[,]数组中。然后,我想检查每个像素并根据它们的颜色将它们分成“箱”,然后对每个箱进行排序。所以我有一个Bin对象,它封装了 a List<Pixel>,并且我有一个List<Bin>包含(相对较少)数量的垃圾箱。

我的问题是,当我尝试从非常大的图像(例如 1920x1200 = 230 万像素)中填充这些 bin 时,我使用的算法比我想要的要慢,我已经将问题追溯到一些 C#语言特定的功能似乎比我预期的要花更长的时间。我想要一些关于如何更好地使用 C# 来消除这些瓶颈的建议。

加载图像后,我调用了一个名为“fillBinsFromSource”的函数,它获取一个可枚举的像素列表,找到它们属于哪个 bin,并将它们放在那里:

对于大图像,预计我的算法会花费一些时间,但是当我在函数调用之外放置一个 Stopwatch 时,结果发现它需要的时间大约是 accrued on 的两倍s,这意味着进行枚举使用foreach正在占用此功能的一半时间(对于 1920x1200 图像,大约 1.6 秒中的 800 毫秒)。

我需要传递一个可枚举列表的原因是因为有时用户只会添加图片的一小部分,而不是整个图片。耗时的调用传递了几个迭代器,首先来自图像列表,然后来自列表中的每个图像,如下所示(简化):

然后最后我称之为

问题 1)由于需要枚举 2D 像素数组和所选区域,这取决于用户选择的内容,因此枚举速度非常慢。我怎样才能加快速度?

然后,在用对象填充所有这些垃圾箱后Pixel,我对它们进行分类。我调用List<Pixel>.Sort()并依赖IComparable,如下所示:

问题2)假设allBins有7个元素;对 7 个单独的列表进行排序,它们总共有 230 万个Pixels 大约需要 2 秒。对一个包含 230 万个随机ints 的列表进行排序需要不到 200 毫秒。我可以理解使用原始类型有一定程度的加速,但是使用起来真的慢了 10 倍以上IComparable吗?这里有什么加速吗?

我为这个冗长的问题道歉,如果有人对我有任何建议,我将不胜感激!

0 投票
2 回答
454 浏览

c# - 对集合进行排序时调用 CompareTo 方法多少次?

如果实现了一个类型IComparable<T>,并且您有一个包含 100 个元素的此类型的集合。当您在此集合上调用 Sort 方法时,该CompareTo方法将被调用多少次以及如何调用?会以这种方式使用吗?

编辑:基本上我要做的是将这种排序方式转变为基于值的排序,在其中我为每个项目分配一些值,然后对它们进行排序。很难解释,但我无法使用基于 -1,0,1 的排序函数来解决这个问题。但我只有一个 CompareTo 函数,我需要用它来对项目进行排序。所以我需要为每个项目生成一些值,然后程序会从最小值到最大值进行排序。