を生成するために反復する必要があるList
of Objects
(約 100k) がありDictionary
ます。ただし、コードは非常に遅く、特に 1 行で実行されます
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 秒 - 確かに私が満足しているよりも長く)、これを達成するためのより速い方法があるかどうか疑問に思っていました。
このコードは一度しか使用されないため、実際には通常の使用法ではなく、通常はその理由で無視しますが、学習目的で疑問に思っていました.