是否有一个内置的方法来获取List<>;
本文关键字:List lt gt 获取 有一个 内置 方法 是否 | 更新日期: 2023-09-27 18:27:48
C#中是否有一个内置方法来获取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
的比较。