首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找特定SortedMap的索引

查找特定SortedMap的索引
EN

Stack Overflow用户
提问于 2014-11-19 15:23:08
回答 2查看 236关注 0票数 0

我有一个类型的SortedMap

data: SortedMap[Long, SortedMap[String, Double]]

如何找到特定键的索引。

例如:

data = (1L -> ("a" -> 1.), 2L -> ("b" -> 1., "c" -> 2.), 3L -> ("b" -> 1.))

我想找到键2L的索引(结果应该是1)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-19 17:51:06

这种方法建立在迭代器对键的基础上,避免按以下方式索引中间集合,

代码语言:javascript
复制
data.keysIterator.indexWhere(_ == 2)

为了便于使用,请考虑这一隐式,

代码语言:javascript
复制
implicit class RichSortedMap[A,B](val m: SortedMap) extends AnyVal {
  def keyIndexWhere(k: A) = m.keysIterator.indexWhere( _ == k )
}

所以你可以如下所示,

代码语言:javascript
复制
data.keyIndexWhere(2)
票数 0
EN

Stack Overflow用户

发布于 2014-11-19 15:35:26

您可以使用zipWithIndex将每个键值与其索引配对,然后使用collectFirst查找具有正确键的对并提取索引。这将返回Option[Int] (如果找不到密钥,则返回None )。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27020509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档