我有一个List
(Objects
大约 100k)必须迭代才能生成Dictionary
. 但是代码执行得很慢,特别是在一行上
public class Item{
public int ID;
public int Secondary_ID;
public string Text;
public int Number;
}
数据看起来像(100k 行)
ID | Secondary_ID | Text | Number
1 | 1 | "something" | 3
1 | 1 | "something else"| 7
1 | 1 | "something1" | 4
1 | 2 | "something2" | 344
2 | 3 | "something3" | 74
2 | 3 | "something4" | 1
我希望它在完成后看起来像这样。(说实话,任何收藏都可以)
Dictionary<int, string>
Key | Value
(secondary_ID) | (Text : Number)
1 | "Something : 3, Something else : 7, Something1 : 4"
2 | "Something2 : 344"
3 | "Something3 : 74, Something4 : 1"
我的代码目前像这样工作,ListAll
包含所有数据。
var Final=new Dictionary<int, string>();
var id1s=ListAll.Select(x => x.ID).Distinct().ToList();
foreach(var id1 in id1s) {
var shortList=ListAll.Where(x => x.ID==id1).ToList(); //99% of time spent is here
var id2s=shortList.Select(x => x.Secondary_ID).Distinct().ToList();
foreach(var id2 in id2s) {
var s=new StringBuilder();
var items=shortList.Where(x => x.Secondary_ID==id2).ToList();
foreach(var i in items) {
s.Append(String.Format("{0} : {1}", i.Text, i.Number));
}
Final.Add(id2, s.ToString());
}
}
return Final;
现在输出是正确的,但是如上面的评论所述,这需要非常长的时间来处理(90 秒 - 当然比我更舒服)并且想知道是否有更快的方法来实现这一点。
这段代码只会使用一次,所以不是真正的正常用法,通常我会因为这个原因而忽略它,但出于学习目的而想知道。