最初のグループを分ける必要があり、それは次のように、多くのコードなしで簡単にデータを集約するの世話をしますそう
static void Main(string[] args)
{
var data = new[]{
new { group="L1", date="2016-09-13", count=1},
new { group="L2", date="2016-09-13", count=2},
new { group="L3", date="2016-09-13", count=3},
new { group="L1", date="2016-09-12", count=1},
new { group="L2", date="2016-09-12", count=2},
new { group="L3", date="2016-09-12", count=3}
};
//convert data to dictionaries
var dictionaries = new Dictionary<string, Dictionary<string, int>>();
foreach (var row in data)
{
if (!dictionaries.ContainsKey(row.group))
dictionaries[row.group] = new Dictionary<string, int>();
if (!dictionaries[row.group].ContainsKey(row.date))
dictionaries[row.group][row.date] = row.count;
}
私はあなたが辞書を使用してカウントを取得することができ、それはすでに非常に使いやすく、ディスプレイだと思う[「L1」] [「2016年9月13日」]例えば、あなたはまだ2次元配列をしたい場合は、 dの辞書を変換するいくつかのforループを使用した2D配列への辞書
//convert dictionary of dictionaries to 2D array
int groupNum = dictionaries.Keys.Count, dateNum = dictionaries.First().Value.Keys.Count;
string[,] array = new string[groupNum + 1, dateNum + 1];
array[0, 0] = "group";
//assign dates
for (int i = 1; i <= dateNum; i++)
array[0, i] = dictionaries.First().Value.Keys.ElementAt(i - 1);
//assign groups
for (int i = 1; i <= groupNum; i++)
array[i, 0] = dictionaries.Keys.ElementAt(i - 1);
//assign counts
for (int group = 1; group <= groupNum; group++)
for (int date = 1; date <= dateNum; date++)
{
array[group, date] = "0";
string groupName = array[group,0], dateString = array[0,date];
if(dictionaries[groupName].ContainsKey(dateString))
array[group, date] = dictionaries[groupName][dateString].ToString();
}
//print the 2D array
for (int row = 0; row < groupNum + 1; row++)
{
for (int column = 0; column < dateNum + 1; column++)
Console.Write("{0} ", array[row, column]);
Console.WriteLine();
}
Console.ReadLine();
}
何が問題なのですか? – user5226582
'count'プロパティはグループ間で常に同じですか?だから、 'L1'内のすべてのエントリは1のカウントを持っていますか? – HimBromBeere
また、 'cd'とは何か、 'list'はどこですか? –