Вы можете использовать zipWithIndex
для сопряжения каждого значения ключа с его индексом, затем используйте collectFirst
, чтобы найти пару с правильным ключом и извлечь индекс. Это вернет Option[Int]
(так None
, если ключ не найден).
val data: SortedMap[Long, SortedMap[String, Double]] = SortedMap(
1L -> SortedMap("a" -> 1.0),
2L -> SortedMap("b" -> 1.0, "c" -> 2.0),
3L -> SortedMap("b" -> 1.0)
)
def findIndex(data: SortedMap[Long, SortedMap[String, Double]], key: Long): Option[Int] =
data.zipWithIndex.collectFirst { case ((`key` , _), i) => i }
scala> findIndex(data, 1L)
res16: Option[Int] = Some(0)
scala> findIndex(data, 2L)
res17: Option[Int] = Some(1)
scala> findIndex(data, 10L)
res18: Option[Int] = None
Если производительность здесь является фактором, то использование 'data.view.zipWithIndex.collectFirst' поможет вам пропустить создание промежуточной коллекции. –