栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用LINQ获取数组中最大值的索引?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用LINQ获取数组中最大值的索引?

我建议编写自己的扩展方法(编辑为带有

IComparable<T>
约束的通用方法。)

public static int MaxIndex<T>(this IEnumerable<T> sequence)    where T : IComparable<T>{    int maxIndex = -1;    T maxValue = default(T); // Immediately overwritten anyway    int index = 0;    foreach (T value in sequence)    {        if (value.CompareTo(maxValue) > 0 || maxIndex == -1)        {  maxIndex = index;  maxValue = value;        }        index++;    }    return maxIndex;}

注意,如果序列为空,则返回-1。

一句话就特点:

  • 这适用于只能枚举一次的序列-这有时可能非常重要,并且通常是IMO的理想功能。
  • 内存复杂度为O(1)(与O(n)进行排序相反)
  • 运行时复杂度为O(n)(与O(n log n)进行排序相反)

至于是否是“
LINQ”:如果已将其作为标准LINQ查询运算符之一包括在内,您会将其视为LINQ吗?它感觉特别陌生还是不同于其他LINQ运营商?如果MS将它作为​​新的运算符包含在.NET
4.0中,它将是LINQ吗?

编辑:如果您真的非常想使用LINQ(而不只是获得一个优雅的解决方案),那么这里的仍然是O(n),并且只评估一次序列:

int maxIndex = -1;int index=0;double maxValue = 0;int urgh = sequence.Select(value => {    if (maxIndex == -1 || value > maxValue)    {        maxIndex = index;        maxValue = value;    }    index++;    return maxIndex; }).Last();

它太可怕了,我不建议您完全使用它-但它可以工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号