如何找到最小值的元素索引?

时间:2010-05-21 13:37:52

标签: list scala functional-programming

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

现在如何找到列表中最小元素的索引(例如,在这种情况下为1)?

4 个答案:

答案 0 :(得分:24)

在Scala 2.8上:

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

{ "selector": "edge.specialSnowflake", "style": { "display": "none" } } 开始,一个稍微安全些的解决方案(处理空列表)将包括使用minOption / Scala 2.13,如果序列为空,则返回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