いそべやきはビールの夢をみる

今日もしがないえんじにあ

【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を使いこなせるようになりたい。