【问题标题】:Finding Index of Array of maximum length in a List? [duplicate]在列表中查找最大长度数组的索引? [复制]
【发布时间】:2021-09-08 04:25:53
【问题描述】:

在包含不同大小数组的List<float[]> 中,我想在列表中找到长度最大的那个数组的索引。

我正在使用以下 LINQ 语句:

 var index = list
   .Select((arr, ind) => new { arr, ind })
   .Where(x => x.arr.Length == list.Max(a => a.Length))
   .Select(x => x.ind)
   .ToList()
   .First();

这似乎可行,但查询返回一个元素列表,其 Length 等于 list.Max(a => a.Length),之后我必须使用 .First() 来获取第一个最大索引。

有没有更有效的方法可以让我直接获取索引值而不是List 避免使用 First

编辑:由于问题被标记为重复,我想澄清一下,我不想要该对象作为回报,而是该对象本身的索引。我浏览了所有我的问题可能重复的帖子,发现它们都返回了MaxLength 的对象。虽然差异很小,但我相信我的问题不是重复的。

编辑:在运行一些测试并测量每个提交的 LINQ 语句所花费的时间后,下表是我的测试期间每种方法所花费的时间(以毫秒为单位)

Test Max Aggregate GroupBy GroupBy OrderByDescending
First 13.5946 1.8927 7.3801 7.1061
Second 12.3544 1.9245 7.4852 7.1755
Third 12.1003 1.8772 7.3531 6.6891

很容易理解,Dmitry Bychenko 给出的Aggregate 方法在这种情况下比任何其他使用的方法都有效得多。 Tim Schmelter 的 GroupByOrderByDescending Answer 也在做同样的工作,但比 Aggregate 花费更多时间。此外,我想避免使用First。因此,我觉得Aggregate 方法适合我的问题。

【问题讨论】:

  • “我相信我的问题不是重复的”——当然你的问题是重复的。即使没有任何尝试寻找答案,您也很有可能是 Stack Overflow 13 年历史上第一个想知道集合中具有最大值的项目的 index 的人给定属性的值将是无穷小的。当然,通过搜索我们很容易找到这样的例子。由于您认为其他重复项不能充分满足您的需求,因此我添加了两个以上,而不是 直接 解决您对项目 index 的担忧。
  • @PeterDuniho "即使没有任何尝试...." -- 说得轻松。可能我在搜索时没有使用正确的术语,但说我没有正确尝试搜索我的查询是错误的。即使认为我在发布问题之前从未搜索过查询,当它总是通知寻找潜在的解决方案时,这也是愚蠢的。不幸的是,我在发布时无法找到正确的解决方案。是的,您添加的问题正在回答我提出的问题。
  • “我从未搜索过该查询的想法......会很愚蠢。” - 你说。对于实际花费大量时间在网站上阅读和回答问题的任何人来说,事实是人们经常在没有任何努力搜索的情况下发帖,而您的问题当然具有所有标志性迹象正是这样,given how trivial it is to find the duplicates。仅仅因为某人暗示你的行为与所有其他新用户看到的一样,就称他们为白痴是愚蠢的。
  • @PeterDuniho 虽然我没有称你为白痴,也没有任何类似的意图,但你有我诚挚的歉意。但是,即使我尽我最大的努力尝试过,但被指出不正确(是的,我承认我看起来不正确)让我脱离了界限。对不起:-)

标签: c# list linq indexing


【解决方案1】:

您可以尝试通用聚合方法Aggregate 而不是特定的Max

  var index = list
    .Select((array, index) => (array, index))
    .Aggregate((s, a) => s.array.Length > a.array.Length ? s : a)
    .index;

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 2021-09-07
    • 1970-01-01
    • 2012-06-29
    • 2021-05-17
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多