0

我有一本字典,其中包含另一本字典作为类似这样的值

Dictionary<string, Dictionary<double,double>> 

现在我想按内部字典的值对其进行排序,我该怎么做?

4

2 回答 2

4

从你的评论来看

抱歉,我不是 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);
于 2013-06-02T01:19:30.793 回答
1

假设您现在正试图弄清楚如何存储和排序具有多个属性的对象集合,那么您有几个选择。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 类

于 2013-06-02T03:05:19.093 回答