【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();
items:どこから選ぶかWhere(...):どんな条件で選ぶかToList():結果を新しいリストにする
Whereは「条件に合うものだけ、ここを通して」という意味です。ラムダ式item => item.Contains("薬")は、先ほどのifと同じ役割を持っています。
まとめ
- 見る:
foreachで1つずつ - 選ぶ:
ifで条件を確認 - 集める:
Addでリストへ - まとめる:
WhereとToList
コードが短いから良いのではなく、「何をしたいか」が伝わるからLINQは便利。









ディスカッション
コメント一覧
まだ、コメントがありません