- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何更改 SortedSet 确定两个对象是否相等的方式。
我有SortedSet<Tuple<Edge, int>>(new Helpers.EdgeDistanceComparer())
比较器方法是:
public class EdgeDistanceComparer : IComparer<Tuple<Edge,int>>
{
public int Compare(Tuple<Edge, int> x, Tuple<Edge, int> y)
{
return Comparer.Default.Compare(x.Item2, y.Item2);
}
}
我相信因为这个 Sorted set 只比较整数 (Tuple.Item2),我该如何在 Edge 类上进行比较
编辑
进一步解释问题:
我想按 Edge 类比较项目,并按 Tuple.Item2 对它们进行排序,如果两个 Tuple.Item2 相等,我想将该项目添加到 SortedSet。
编辑 2
Ben 给出了很好的答案,但最后我决定在我的类中再添加一个属性,这样我保存在 Tuple.Item2 中的值现在保存在我的 Edge 类的属性中。然后我实现了 IComparable 接口(interface),所以这是我的 Edge 类的样子:
public class Edge : IComparable
{
public Coordinate Coordinates { get; set; }
public string Value { get; set; }
public Edge Parent { get; set; }
public int Cost { get; set; }
public int CompareTo(object obj)
{
var thatEdge = (Edge) obj;
if (Cost > thatEdge.Cost)
{
return 1;
}
if (Cost < thatEdge.Cost)
{
return -1;
}
// cost may be same but coordinates must be different
if (Cost == thatEdge.Cost &&
(Coordinates.X != thatEdge.Coordinates.X || Coordinates.Y != thatEdge.Coordinates.Y))
{
return -1;
}
return 0;
}
}
和 SortedSet 的 IComparer:
public class EdgeDistanceComparer : IComparer<Edge>
{
public int Compare(Edge x, Edge y)
{
return Comparer.Default.Compare(x, y);
}
}
最佳答案
我相信this answer另一个问题包含最接近你想要的东西
在本例中为 TValue
是你的 Tuple<Edge,int>
, 所以你的 IComparer
在施工中传递的那个将与您帖子中的相同。
唯一的其他添加,使其表现得像 Set
, 就是给Add
加个勾仅当集合不包含具有相同 Edge
的项目时才添加到集合中的方法.一种方法是:
public void Add(TValue item)
{
if(!_Container.Select(p => p.Value).Contains(item, _equalityComparer)
_Container.Add(Indexed.Create(_Index++, item));
}
在哪里_equalityComparer
是一个 IEqualityComparer<Tuple<Edge,int>>
如果边相等,则返回 true。
不幸的是,这有点困惑,我认为它可能会失去很多您可能希望从 SortedSet
获得的性能优势。 , 但它可能是你能得到的最好的,因为 System.Collections
中没有任何内容。面向这个。如果性能不重要,您可以尝试 Set
甚至 List
,并在需要时进行排序。即使性能很重要,您可能仍想进行比较,看看这是否更好。
关于C# SortedSet 元素相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790046/
有人能解释一下为什么这段代码编译并运行良好,尽管 SortedSet是接口(interface)而不是具体类: public static void main(String[] args) {
鉴于以下 Scala 2.9.2 代码: 更新了非工作示例 import collection.immutable.SortedSet case class Bar(s: String) trait
我有一个对象 Test,它有两个属性:double x 和 double y。我想将这些对象添加到 SortedSet 中,使集合在 Test 的 x 上按 ASC 顺序排序。如果 Test 的两个实
我正在考虑用 SortedSet 替换 HashSet,因为它更适合我存储的数据。 但是,到目前为止我看到的所有示例都与存储简单对象有关 - int、字符串等。 我想为具有许多属性的自定义类实现此功能
我想知道如何更改 SortedSet 确定两个对象是否相等的方式。 我有SortedSet>(new Helpers.EdgeDistanceComparer())比较器方法是: public cla
我有一个类的实例,我想按特定顺序对其进行排序,但也能够使用不同的标准判断一个实例是否存在于集合中。示例: public class Foo { int x; int y; pu
我需要将 sourceList 中的对象添加到一个集合中,该集合在我们将对象添加到集合中时对集合进行排序。我正在考虑使用TreeSet . TreeSet bookSet 根据某些条件,我需要获取bo
尝试如下所示编写我的类会出现编译错误 public class CustomTreeSet> implements SortedSet> { } 错误: Syntax error on token "
以下代码创建了一个排序集,它按其值而不是键进行排序。 vertexRank 是一个对象,负责获取值。一切正常,除了代码:vertexCentralities.addAll(vMap.entrySet(
如 SortedSet 中所述 Represents a collection of objects that is maintained in sorted order SortedSet 中的“有
来自 SortedSet文档: several methods return subsets with restricted ranges. Such ranges are half-open, th
假设一个应用程序产生了一系列 HashMap数据结构,每个包含几十到几百个Comparable MyClass 类型的对象,需要以单个形式结束并排序 Collection . 此功能的两个可能实现返回
我试图使用排序集解决运行中值问题(在 hackerrank 上)。只有它的元素没有正确排序。 在此处查看实际效果:http://rextester.com/NGBN25779 public class
我想使用一个排序的集合,但我可以通过索引访问其中的元素,即我想要一些同时具有 Set 和 List 特征的东西。 Java.util.TreeSet 非常接近我的需要,但不允许通过索引访问。 我可以想
考虑这个类 public class A { float Order string Name public A(float order, string name)
在 SortedSet 的 Julia 文档中,有一个对“排序对象”的引用,可以在构造函数中使用。我正在做一个项目,我需要在一组结构上实现自定义排序。我想为此使用仿函数,因为我需要额外的状态来进行比较
我正在尝试解决 LeetCode https://leetcode.com/problems/nth-magical-number/ 的问题。我可以提交我的解决方案,但我想加快速度,我想这样做的方法之
这更多的是出于好奇,因为我从未注意到性能问题。假定设置大小介于 1-1000 之间。这是一个案例: private static SortedSet sortAuthorities( fina
在 SortedSet 的 Julia 文档中,有一个对“排序对象”的引用,可以在构造函数中使用。我正在做一个项目,我需要在一组结构上实现自定义排序。我想为此使用仿函数,因为我需要额外的状态来进行比较
我正在开发一个文字游戏,它的方法之一是打乱方法,它应该采用 String s,然后使用 Collections.shuffle(ListOfSChars); 对其进行洗牌;并检查 scramble 是
我是一名优秀的程序员,十分优秀!