Как найти индекс элемента с минимальным значением? - PullRequest
13 голосов
/ 21 мая 2010

Скажите, у меня есть список val list = List(34, 11, 98, 56, 43).

Теперь, как мне найти индекс минимального элемента списка (например, в данном случае 1)?

Ответы [ 4 ]

24 голосов
/ 21 мая 2010

На Scala 2.8:

List(34, 11, 98, 56, 43).zipWithIndex.min._2
6 голосов
/ 22 мая 2010

Полагаю, самый простой способ - list.indexOf(list.min). Когда список пуст, будет выдано исключение, хотя ответ Даниэля будет таким же.

6 голосов
/ 21 мая 2010

Пустой список не имеет минимального значения. Список только из одного элемента имеет этот элемент как минимум. Для всех других списков минимум является либо первым элементом этого списка, либо минимумом остальной части списка, в зависимости от того, что больше.

Таким образом, для нахождения индекса это делается следующим образом: для списка длиной 1 индекс минимума равен 0. Если в списке более одного элемента, а минимум хвоста больше, чем голова, то это также 0. Если голова больше, чем индекс, это индекс минимума хвоста плюс один.

2 голосов
/ 02 октября 2018

Начиная с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...