foreachで数えたい §
forではなく、foreachで数値を数えることはできるでしょうか?
できません。
foreach文に数を数える機能は含まれません。
ですが、いくつかのメソッドの力を借りれば数値をカウントできます。
たとえば、Selectメソッドはシーケンスの項目に昇順の番号を割り当てる機能があります。これを併用すると、foreachメソッドで数字をカウントできます。
それには、Selectメソッドの引数のラムダ式に引数が2つあるものを使います。2つの引数のうち片方はシーケンスの値そのもの。もう1つはSelectメソッドが生成した昇順の番号です。
罠の数々 §
- Selectメソッドがカウントしてくれる番号は0から始まるので、1から始めるためにはそれに1を足す必要がある。サンプルソース中の+1をチェックしておこう。
参考リンク §
Enumerable.Select メソッド
上記のリンクを辿って、2種類あるSelect メソッドの違いを確認しておこう。そして、インデックス値を生成した方が良い場合と必要がない場合が何か考えてみよう。
リポジトリ §
https://github.com/autumn009/cshowto
ForeachCount §
using System;
using System.Linq;
class Program
{
static void Main()
{
string[] names = { "熱海", "斑鳩", "宇野" };
foreach (var item in names.Select((name, number) => new { name, number }))
{
Console.WriteLine($"{item.number + 1} {item.name}");
}
}
}
実行結果
1 熱海
2 斑鳩
3 宇野