是否有一个内置的方法来获取List<>;

本文关键字:List lt gt 获取 有一个 内置 方法 是否 | 更新日期: 2023-09-27 18:27:48

C#中是否有一个内置方法来获取List中的最大索引?

是否有一个内置的方法来获取List<>;

不,没有内置的方法。你可以随时使用
int maxIndex = myList.Count - 1;

对于List,您可以保证元素将在0..Count-1的范围内,因此您可以创建一个扩展方法:

public static int LastIndex<T>(this List<T> list)
{
  return list.Count-1;
}

当然,当列表中有0个元素时,这些行将返回-1,这可能是个问题。

最大有效索引总是大小-1,因此:

int maxIndex = list.Count - 1;

如果你想以一种可读的方式获得最后一个索引处的,你可以使用LINQ:

var item = list.Last();

请注意,这不会像使用list[list.Count - 1]那样高效,但它不会是一个O(n)操作-LINQ to Objects在各个地方都进行了优化,以利用IList<T>

如果你指的是最大值的索引,那么没有。你可能会写一个扩展方法:

这些适用于最小和最大

static class Tools {
    public static int IndexOfMin<TSource>(this IEnumerable<TSource> source) where TSource : IComparable<TSource> {
        int index = -1;
        int i = -1;
        TSource min = default(TSource);
        foreach (var element in source) {
            i++;
            if (index == -1 || (min != null && min.CompareTo(element) > 0)) {
                index = i;
                min = element;
            }
        }
        return index;
    }
    public static int IndexOfMax<TSource>(this IEnumerable<TSource> source) where TSource : IComparable<TSource> {
        int index = -1;
        int i = -1;
        TSource max = default(TSource);
        foreach (var element in source) {
            i++;
            if (index == -1 || (max == null && element != null) || max.CompareTo(element) < 0) {
                index = i;
                max = element;
            }
        }
        return index;
    }
}

注意,这些方法将null视为最小值。对于不可为null的类型,编译器将忽略与null的比较。