我有一本字典,其中包含另一本字典作为类似这样的值
Dictionary<string, Dictionary<double,double>>
现在我想按内部字典的值对其进行排序,我该怎么做?
从你的评论来看
抱歉,我不是 c# 专家,您能建议一种将 3 个值存储为一个项目的方法吗?
我建议创建一个类并像这样对其进行排序
public class MyClass
{
public string StringProperty {get;set;}
public int FirstDoubleProperty {get;set;}
public int SecondDoubleProperty {get;set;}
}
然后像这样创建一个集合
List<MyClass> MyClasscol = new List<MyClass>();
MyClass mc = new MyClass();
mc.StringProperty = "User1225072";
mc.FirstDoubleProperty = 5;
mc.SecondDoubleProperty = 6;
MyClasscol.Add(mc);
mc = new MyClass();
// and So on
然后像这样排序
var newsortedcollection = MyClasscol.OrderBy(x => x.FirstDoubleProperty);
假设您现在正试图弄清楚如何存储和排序具有多个属性的对象集合,那么您有几个选择。Nikhil Agrawal 的回答是一个很好的解决方案,但有时您可能不需要/不想为此创建自定义类。对于这些情况(最好是当您的代码是私有的而不是某些 API 的一部分时),那么下面的替代方案可能是一种选择。
键值对
根据您的要求和您使用字典的原始帖子,您可能想要一个键值对字典(平面)而不是字典字典(多层)。
// using keyvaluepair
var keyValueDict = new Dictionary<string, KeyValuePair<double, double>>();
keyValueDict.Add("string", new KeyValuePair<double, double>(5.8, 7.4));
var sortedKeyValues = keyValueDict.OrderBy(x => x.Value.Key);
元组
不那么令人愉快的 KeyValuePair 的替代方法是 .NET 4 中引入的元组。元组是一个通用类,它允许您存储类型化的属性值,而无需创建自己的自定义类。值得注意的是,最多有 8 个属性的元组实现。
// using tuple
var tupleList = new List<Tuple<string, double, double>>();
tupleList.Add(new Tuple<string, double, double>("string", 5.8, 7.4));
var sortedTuples = tupleList.OrderBy(x => x.Item2);
如果您有兴趣,有一些关于元组的很好的 SO 问题:
在我的 C# 代码中使用 .NET 4.0 元组是一个糟糕的设计决策吗?
既然我们有泛型,是否需要 EventArg 类