首页 / .NET / 正文

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

19795 发布于: 2018-01-13 读完约需5分钟

.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查询出来的结果转换成字典(Dictionary)?

下一篇: .NET[C#]LINQ lambda表达式如何实现倒序排序(ORDER BY DESC)?

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

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册