【问题标题】:sort 2 dictionaries linq c#排序2个字典linq c#
【发布时间】:2015-10-02 06:22:26
【问题描述】:

我有 2 个嵌套字典,我想用 2 个条件对其进行排序。首先按 Value.Count 排序,然后按值(十进制)在字典中排序。我在第二种排序中失败了,因为 b.Value.Values 得到的 Collection 是不可排序的。怎么解决?

string path = @"D:\";
        string saveReportPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    Dictionary<string, Dictionary<string, long>> folderContent = new Dictionary<string, Dictionary<string, long>>();

    string[] files = Directory.GetFiles(path);

    foreach (var file in files)
    {
        string key = Regex.Match(file, @"\.[a-z\d]+$").Value;
        if (!folderContent.ContainsKey(key))
        {
            folderContent.Add(key, new Dictionary<string, long>());
        }
        FileInfo currentFileInfo = new FileInfo(file);
        folderContent[key].Add(currentFileInfo.Name, currentFileInfo.Length);
    }
Dictionary<string, Dictionary<string, decimal>> folderContent =
   new Dictionary<string, Dictionary<string, decimal>>();

var orderedDict = folderContent
    .OrderByDescending(a => a.Value.Count)
    .ThenBy(b => b.Value.Values);

简单输入

D:\

输出

    .jpg
--FileName.jpg - 1237128kb
--FileName.jpg - 12371282323kb
--FileName.jpg - 1237122323232238kb
.zip
Class.cs - 123kb
and so on..........

【问题讨论】:

  • 首先,你明白你不会得到一个排序的字典吗?你可以得到一个有序的键/值对序列——这对你来说可以吗?其次,“然后按值在字典中排序”是什么意思并不清楚。您的意思是您正在尝试重新排序现有的“内部”字典,或者您正在尝试根据“内部”字典中的值对外部键/值对进行排序?一个简短但完整的示例(包括示例输入和预期输出)将使这更加更清晰。
  • 我正在尝试根据“内部”字典中的值对外部键/值对进行排序。输入是文件夹路径(例如 D:)。 Dictionary> string 保存所有文件扩展名 Dictionary string 保存文件名,decimal 保存文件大小 我想先按扩展名排序,然后按大小排序
  • 再次,如果您编辑问题以显示示例输入/输出,那么简单得多...
  • var orderInnerDict = folderContent.Values.Select(a => a.Values).OrderBy(x => x);我走对了吗?
  • 我怎么知道你还没有给我们一个有用的例子? (您建议输入单个字符串,而不是字典...)我不知道还有多少其他方法可以解释您应该如何改进您的问题...

标签: c# dictionary nested sql-order-by


【解决方案1】:

但是第二个字典有多个值。您可以对值或最小/最大值甚至总和中的第一项或最后一项使用排序。

var orderedDict = folderContent
.OrderByDescending(a => a.Value.Count)
.ThenBy(b => b.Value.Values.Sum());

【讨论】:

  • .Sum() 会给我一个从 currentValue 到 lastValue 的总和并对它们进行排序。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多