我正在学习scala,有一次我想根据值(而不是键)从地图中删除条目.我还想知道删除了多少条目 - 我的程序期望只删除一个条目.按值删除条目可以通过应用filterNot来完成,但是 - 如何验证是否删除了一个条目?
到目前为止,我看到实现这一目标的唯一方法是运行谓词两次 - 一次用于"count"方法(计算谓词匹配的频率),然后使用filterNot实际删除条目.
什么是Scala一次实现这一目标的方式?
我发现的唯一其他解决方案是首先使用filter(...)来获取要删除的值,然后使用" - "按键来抛出元素 - 但同样,这需要两次运行.
只要您不介意从删除的信息中创建集合,您可以使用partition:
scala> Map(1 -> 1, 2 -> 2, 3 -> 3)
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3)
scala> res0.partition { case (k, v) => v % 2 == 0 }
res3: (Map(2 -> 2),Map(1 -> 1, 3 -> 3))
Run Code Online (Sandbox Code Playgroud)
如果您只想知道是否只删除了一个条目,那么您可以使用size来获取过滤器操作之前和之后的大小.差异应该是一个.
scala> Map(1 -> 1, 2 -> 2, 3 -> 3)
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3)
scala> res0.filterNot { case (k, v) => v % 2 == 0 }
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 3 -> 3)
scala> res0.size - res1.size
res2: Int = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |