如何在IEnDigable中获取元素的索引?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我写了这个:

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();
    }
}

但我不知道它是否已经存在,是吗?

提问于
用户回答回答于

把IEnumerable解释出来的重点就是让你可以遍历内容。因此,没有真正的索引概念。你所做的事情对IEnumerable来说确实没什么意义。如果需要支持索引访问的内容,请将其放入实际列表或集合中。

用户回答回答于

也许:

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

(使用EqualityComparer<T>.Default模仿!=(如果需要的话)---

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;
}

扫码关注云+社区