C#中是否有内置方法来获取List中的最大索引?
答案 0 :(得分:10)
不,没有内置方法。你可以随时使用
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 :(得分:8)
最大有效索引的大小始终为1,因此:
int maxIndex = list.Count - 1;
如果要以非常易读的方式在最后一个索引处获取值,可以使用LINQ:
var item = list.Last();
请注意,这不会完全与使用list[list.Count - 1]
一样高效,但不会成为O(n)操作 - LINQ to Objects在各个地方进行了优化,以利用IList<T>
。
答案 2 :(得分:0)
如果你的意思是最大值的索引然后没有,那就没有了。您可以编写扩展方法:
这些是最小和最大。
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
的比较。