配列_string[] weekDays = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
_があり、「s」を含む配列要素のインデックスを見つけたいとします。 Linqを使用してこれを行うにはどうすればよいですか?
私はint[] indexOfDaysContainingS = weekDays.Where(day => day.Contains("s")).Select((day, index) => index).ToArray();
を試しましたが、代わりにフィルタリングされた_0,1,2
_のインデックスをWhere()句の後に取得しているため、これは_IEnumberable<string>
_を返します。 Select()を最初に置いた場合、私が持っているのはインデックスだけであり、日数でフィルタリングすることはできません。
それを機能させ、代わりに_1,2,3
_を返すために何を変更する必要がありますか?
あなたはこのようにすることができます:
weekDays.Select((day, index) => new { Day = day, Index = index })
.Where(x => x.Day.Contains("s"))
.Select(x => x.Index)
.ToArray();
これが最適かどうかわかりません。
Patkoの答えは、一般的な場合の方法です。
さらに2つのオプションがあります。
// Idea only works with collections that can be accessed quickly by index.
int[] indices = Enumerable.Range(0, weekDays.Length)
.Where(index => weekDays[index].Contains("s"))
.ToArray();
MoreLinq の場合:
// Similar to Patko's idea, except using a 'named' type.
int[] indices = weekDays.AsSmartEnumerable()
.Where(item => item.Value.Contains("s"))
.Select(item => item.Index)
.ToArray();