【发布时间】: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