【C#】dictionaryをあれこれする
値の上書きや取り出しで苦戦したので残しておく。
名前とその人の体重をまとめて格納したいのでdictionaryを使う。
◆まずは普通に定義。
var dic = new Dictionary<string, int>(3);
◆データ格納。
dic.Add("田中", 40);
dic.Add("大山", 45);
dic.Add("佐藤", 60);
◆「〇〇さんは△△kgです」の形式で全部取り出し
foreach(var d in dic)
{
Console.WriteLine($"{d.Key}さんは{d.Value}kgです");
}
→
田中さんは40kgです
大山さんは45kgです
佐藤さんは60kgです
◆名前のみ取り出し(System.Linq名前空間の定義必要)
var keys = dic.Keys.ToList();
foreach(var k in keys)
{
Console.WriteLine(k);
}
→
田中
大山
佐藤
◆体重のみ取り出し
var values = dic.Values.ToList();
foreach(var v in values)
{
Console.WriteLine(v);
}
→
40
45
60
◆全員の体重を2倍に上書き
foreach(var k in keys)
{
dic[k] *= 2;
Console.WriteLine(dic[k]);
}
→
80
90
120
◆体重の小さい順に並び替え
var asc = dic.OrderBy(x=>x.Value);
foreach(var a in asc)
{
Console.WriteLine($"{a.Key}さん:{a.Value}kg");
}
→
田中さん:80kg
大山さん:90kg
佐藤さん:120kg
◆体重の大きい順に並び替え
var desc = dic.OrderByDescending(x => x.Value);
foreach(var d in desc)
{
Console.WriteLine($"{d.Key}さん:{d.Value}kg");
}
→
佐藤さん:120kg
大山さん:90kg
田中さん:80kg
◆体重が100kg超えている人だけ抽出
var target = dic.Where(t=>t.Value>=100);
foreach(var t in target)
{
Console.WriteLine($"{t.Key}さんは100キロ以上です");
}
→
佐藤さんは100キロ以上です
Linqを使いこなせるようになりたい。