【问题标题】:How to find index of element with minimum value?如何找到具有最小值的元素的索引?
【发布时间】:2011-02-22 09:00:24
【问题描述】:

假设我有一个列表val list = List(34, 11, 98, 56, 43).

现在如何找到列表中最小元素的索引(例如本例中的 1)?

【问题讨论】:

  • 是作业吗。我觉得做起来太容易了
  • 这是一道极其简单的作业题。
  • @vodkhang 和@Odrade,我毕业 10 年了。他们没有在我们的大学教我们函数式编程。因此,这些听起来像家庭作业的问题。 :(
  • 但是,这是一个正常的循环吗?您只需有一个变量存储当前最小值,然后循环遍历循环。函数式编程没有什么特别的,或者至少你可以用 OOP 或过程编程来解决它,我错过了什么吗?
  • @vodkhang,我正在学习功能性地做事。

标签: list scala functional-programming


【解决方案1】:

在 Scala 2.8 上:

List(34, 11, 98, 56, 43).zipWithIndex.min._2

【讨论】:

    【解决方案2】:

    我想最简单的方法是list.indexOf(list.min)。当列表为空时它会抛出异常,尽管丹尼尔的回答也是如此。

    【讨论】:

      【解决方案3】:

      空列表没有最小值。只有一个元素的列表将该元素作为其最小值。对于所有其他列表,最小值是该列表的第一个元素或列表其余部分的最小值,具体取决于哪个更大。

      所以要找到索引,这变成:对于长度为 1 的列表,最小值的索引是 0。如果列表有多个元素并且尾部的最小值大于头部,那么它也是 0。如果头部大于索引是尾部的最小值加一的索引。

      【讨论】:

        【解决方案4】:

        Scala 2.13 开始,一个稍微安全一点的解决方案(处理空列表)包括使用minOption/maxOption,如果序列为空,则返回None

        List(34, 11, 98, 56, 43).zipWithIndex.minOption.map(_._2)
        // Option[Int] = Some(1)
        List[Int]().zipWithIndex.minOption.map(_._2)
        // Option[Int] = None
        

        这样,当列表为空时,您还可以决定使用默认值:

        List(34, 11, 98, 56, 43).zipWithIndex.minOption.map(_._2).getOrElse(-1)
        // Int = 1
        List[Int]().zipWithIndex.minOption.map(_._2).getOrElse(-1)
        // Int = -1
        

        【讨论】:

          猜你喜欢
          • 2011-06-25
          • 1970-01-01
          • 1970-01-01
          • 2017-12-13
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          • 2013-07-30
          • 2013-11-14
          相关资源
          最近更新 更多