【C#】foreachからLINQへ|RPGのアイテムで「絞り込む」を理解しよう

広告

剣や盾の中から回復薬を選び、リストにまとめる流れ

数字だけの例から、少し身近な世界へ。今回はRPGのアイテム名から「薬」が入ったものだけを取り出し、foreachからLINQへ少しずつ進みます。

変数名を、物語が見える名前に

nums2では、中身を想像できません。複数のアイテムはitems、その中の1つはitem、薬だけを集めたリストはmedicineItemsと名付けましょう。

  • items:すべてのアイテム
  • item:今見ている1つのアイテム
  • medicineItems:「薬」を含むアイテム

リストは複数形、1つ取り出した変数は単数形。コードが文章のように読めるようになります。

STEP 1:条件に合うアイテムを表示する

foreachでアイテムを1つずつ取り出し、Containsで「薬」が含まれるか調べます。

var items = new List<string>
{
    "回復薬", "鉄の剣", "毒消し薬",
    "木の盾", "魔力回復薬"
};

foreach (var item in items)
{
    if (item.Contains("薬"))
    {
        Console.WriteLine(item);
    }
}

実行結果は「回復薬」「毒消し薬」「魔力回復薬」です。foreach (var item in items)は「アイテムたちから、アイテムを1つずつ見る」と読めます。

STEP 2:新しいリストに集める

表示するだけでなく後でも使いたい場合は、空のリストを用意して条件に合ったアイテムを追加します。

var medicineItems = new List<string>();

foreach (var item in items)
{
    if (item.Contains("薬"))
    {
        medicineItems.Add(item);
    }
}

ここでしているのは「1つずつ見る → 条件を調べる → 合うものを集める」の3段階です。

STEP 3:同じことをLINQで書く

var medicineItems = items
    .Where(item => item.Contains("薬"))
    .ToList();
  1. items:どこから選ぶか
  2. Where(...):どんな条件で選ぶか
  3. ToList():結果を新しいリストにする

Whereは「条件に合うものだけ、ここを通して」という意味です。ラムダ式item => item.Contains("薬")は、先ほどのifと同じ役割を持っています。

まとめ

  1. 見るforeachで1つずつ
  2. 選ぶifで条件を確認
  3. 集めるAddでリストへ
  4. まとめるWhereToList

コードが短いから良いのではなく、「何をしたいか」が伝わるからLINQは便利。

訪問数 2 回, 今日の訪問数 2回

広告

C#

Posted by hidepon