IEnumerable 内の要素のインデックスを取得するにはどうすればいいですか? 質問する

IEnumerable 内の要素のインデックスを取得するにはどうすればいいですか? 質問する

私はこう書きました:

public static class EnumerableExtensions
{
    public static int IndexOf<T>(this IEnumerable<T> obj, T value)
    {
        return obj
            .Select((a, i) => (a.Equals(value)) ? i : -1)
            .Max();
    }

    public static int IndexOf<T>(this IEnumerable<T> obj, T value
           , IEqualityComparer<T> comparer)
    {
        return obj
            .Select((a, i) => (comparer.Equals(a, value)) ? i : -1)
            .Max();
    }
}

しかし、それがすでに存在しているかどうかはわかりません。

ベストアンサー1

私はその賢明さに疑問を抱きますが、おそらく:

source.TakeWhile(x => x != value).Count();

(必要な場合はEqualityComparer<T>.Defaultエミュレートするために使用!=) - ただし、見つからない場合は -1 を返すように注意する必要があります... そのため、長い方法で実行することをお勧めします

public static int IndexOf<T>(this IEnumerable<T> source, T value)
{
    int index = 0;
    var comparer = EqualityComparer<T>.Default; // or pass in as a parameter
    foreach (T item in source)
    {
        if (comparer.Equals(item, value)) return index;
        index++;
    }
    return -1;
}

おすすめ記事