【发布时间】:2012-08-26 12:11:33
【问题描述】:
我认为这可以在单个 LINQ 中完成,但无法解决。下面的表现还可以(大List上2秒)。主要是我想摆脱创建 List 只是为了排序的内存问题。需要返回 dlWord21 按第二个 int 再按第一个 int 排序。
List<DocFTSinX> docFTSinXs = new List<DocFTSinX>();
foreach (KeyValuePair<int, Dictionary<int, byte>> kvpm in dlWord21)
{
foreach (KeyValuePair<int, byte> kvps in kvpm.Value)
{
docFTSinXs.Add(new DocFTSinX(kvps.Key, kvpm.Key, kvps.Value));
// Word1 Word2
}
}
dlWord21.Clear();
return docFTSinXs.OrderBy(x => x.Word1).ThenBy(x => x.Word2);
【问题讨论】:
-
问题是你必须在某个时候创建一个列表,因为你正在清除你的源集合,所以枚举不起作用
-
@BobVale 以上是工作代码。 docFTSinXs 是新的,它获得了新的价值。因此我的记忆问题。
-
我的意思是,如果你避免创建一个列表,那么你就不能调用
dlWord21.Clear(),因为枚举可能会在 clear() 之后发生延迟。因此需要创建一个列表。 -
@BobVale 来吧,你真的认为我会用 dlWord21.Clear() 将尼克的出色回答放在前面?这些问题是“在一个 LINQ 中完成的”。我把 dlWord21.Clear();在我的问题中强调内存管理问题以及我正在返回一个新对象。
标签: .net linq sorting dictionary