gpt4 book ai didi

c# - 如何将元组与条目的自定义比较器进行比较,但元组的默认比较器?

转载 作者:行者123 更新时间:2023-12-05 03:50:10 25 4
gpt4 key购买 nike

我想对 List<Tuple<Vertex, Vertex>> 进行排序,即元组列表,其中每个元组包含一定数量的顶点。
Vertex是自定义类,ListTuple来自System .

我已经有几个Comparer s 提供了一种比较两个顶点的方法,例如:
class MyVertexComparer1 : Comparer<Vertex>class MyVertexComparer2 : Comparer<Vertex>

现在我想使用这些现有的 Comparer s 根据默认的元组比较对列表进行排序,即比较第一个条目,并且仅在平局的情况下比较下一个条目。
此排序中两个元组的比较应由自定义 VertexComparers 之一确定。

我知道我可以写一个 class MyTupleComparer : Comparer<Tuple<Vertex, Vertex>>使用 MyVertexComparer在其实现中,可能使用一个通用参数来指定要使用的 VertexComparer。但是,这感觉不对,因为我只是重复元组的默认比较。
此外,我看不出如何将其扩展到具有两个以上顶点的元组,而无需为每个顶点数量提供专用的比较器类。

最佳答案

制作Vertex一个IComparable<Vertex> , 以及默认的 SortList<T>将按照您的描述工作;也就是说,默认比较器将用于 Tuple ,因为没有提供自定义比较器,并且 Vertex.CompareTo方法将用于条目。

如果您想重复使用现有的 Comparer s,您可以委托(delegate)/共享功能给 IComparable<Vertex>.CompareTo执行;但是如果不写另一个 Comparer 就不能做你想做的事对于 Tuple (它适用于每种 Tuple ,因为 Tuple<T1, T2>Tuple<T1, T2, T3>不同的类型),或者实现 IComparable<Vertex>Vertex类型。

关于c# - 如何将元组与条目的自定义比较器进行比较,但元组的默认比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63582007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com