首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在IEnumerable中获取元素的索引?

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

Stack Overflow用户
提问于 2009-08-17 21:37:24
回答 9查看 232.5K关注 0票数 162

我写了以下内容:

代码语言:javascript
复制
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();
    }
}

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

EN

回答 9

Stack Overflow用户

发布于 2009-08-17 21:43:08

我会质疑这是否明智,但也许:

代码语言:javascript
复制
source.TakeWhile(x => x != value).Count();

(如果需要,使用EqualityComparer<T>.Default模拟!= )-但如果找不到,则需要观察返回...所以也许只需要走很长一段路

代码语言:javascript
复制
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;
}
票数 137
EN

Stack Overflow用户

发布于 2009-08-17 21:47:42

我会像这样实现它:

代码语言:javascript
复制
public static class EnumerableExtensions
{
    public static int IndexOf<T>(this IEnumerable<T> obj, T value)
    {
        return obj.IndexOf(value, null);
    }

    public static int IndexOf<T>(this IEnumerable<T> obj, T value, IEqualityComparer<T> comparer)
    {
        comparer = comparer ?? EqualityComparer<T>.Default;
        var found = obj
            .Select((a, i) => new { a, i })
            .FirstOrDefault(x => comparer.Equals(x.a, value));
        return found == null ? -1 : found.i;
    }
}
票数 28
EN

Stack Overflow用户

发布于 2014-11-06 19:29:11

我目前使用的方法比已经建议的方法要短一些,据我所知,它给出了预期的结果:

代码语言:javascript
复制
 var index = haystack.ToList().IndexOf(needle);

它有点笨拙,但它能做这件事,而且相当简洁。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1290603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档