是否有内置方法来获取List的最大索引<>?

时间:2012-03-14 08:42:27

标签: c# .net list

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

3 个答案:

答案 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的比较。