【发布时间】:2014-05-31 22:30:34
【问题描述】:
我有一个Dictionary<Point, int> MyDic,Point 类定义如下:
public class Point
{
public double X { get; set; }
public double Y { get; set; }
}
如何使用LINQ 根据Key 对MyDic 进行排序?我想通过X 订购,然后通过Y 订购。
例如,如果我的字典如下所示:
Key (Point (X,Y)) Value (int)
--------------------------------------
(8,9) 6
(5,4) 3
(1,4) 2
(11,14) 1
排序后是这样的:
Key (Point (X,Y)) Value (int)
--------------------------------------
(1,4) 2
(5,4) 3
(8,9) 6
(11,14) 1
【问题讨论】:
-
如果您要将自定义类存储在字典中,您确实应该覆盖
GetHashCode和Equals。 -
@ScottChamberlain 这适用于我在字典中使用的所有自定义类,还是仅适用于我要排序的字典?
-
如果您创建了一个没有自定义比较器的字典,它将使用
Comparer<T>.Default,而后者又在类上使用GetHashCode()和Equals(object)。因此,对于您使用的每个字典,您的选择是要么拥有一个实现Equals(和GetHashCode()的类,要么使用一个使用不依赖于Equals()和GetHashCode()内置类型的自定义比较器的字典(因为它提供了它自己的这两个实现)。 -
就我不排序字典而言,我可以在字典中使用自定义类对吗?
-
只要您正在创建将
IComparer<TKey>传递给构造函数的字典,或者自定义类覆盖GetHashCode()和Equals(object),就可以。但是还有其他问题,例如键 must be immutable 被用作字典的键。
标签: c# linq sorting dictionary