.NET[C#]LINQ如何获取某个元素在集合中的索引位置?

.NET 作者: Rector 535阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

.NET[C#]LINQ如何获取某个元素在集合中的索引位置?

问题描述

如何查找到下列集合中最小值所在的索引位置:

{3,1,0,5}

期望值为:2

方案一

public static int FindIndex<T>(this IEnumerable<T> items, Func<T, bool> predicate) {
    if (items == null) throw new ArgumentNullException("items");
    if (predicate == null) throw new ArgumentNullException("predicate");

    int retVal = 0;
    foreach (var item in items) {
        if (predicate(item)) return retVal;
        retVal++;
    }
    return -1;
}

public static int IndexOf<T>(this IEnumerable<T> items, T item) { return items.FindIndex(i => EqualityComparer<T>.Default.Equals(item, i)); }

方案二

var list = new List<int> { 3, 1, 0, 5 };
int pos = list.IndexOf(list.Min()); // returns 2

方案三

List<int> values = new List<int> { 3, 1, 0, 5 };

int index =
   values
   .Select((n, i) => new { Value = n, Index = i })
   .Aggregate((a,b) => a.Value < b.Value ? a : b)
   .Index;

方案四

var list = new List<int> { 3, 1, 0, 5 };
int pos = Enumerable.Range(0, list.Count)
    .Aggregate((a, b) => (list[a] < list[b]) ? a : b); // returns 2

方案五

int id = listMyObject.FindIndex(x => x.Id == 15);

或者

int id = myEnumerator.ToList().FindIndex(x => x.Id == 15);

或者

int id = myArray.ToList().FindIndex(x => x.Id == 15);

方案六

var data = new List<int> { 3, 1, 0, 5 };

var result = Enumerable.Range(0, data.Count).OrderBy(n => data[n]).First();

阅读了该文章的人还浏览了...

本文永久链接图享网 » .NET[C#]LINQ如何获取某个元素在集合中的索引位置?

发布于: 2018-01-13 18:30:01
分享扩散:

文章评论

获取验证码