【问题标题】:Returning Option of (Int,Int) in scala from a List[Int,Int]从列表中返回 (Int,Int) 的选项 [Int,Int]
【发布时间】:2017-09-23 14:49:41
【问题描述】:

我有一个 scala 元组列表,按元组的第一个元素降序排序。 我尝试了以下一些操作,它们可以从列表中返回一些元素或List()

scala> val l = List((95,6),(10,2),(8,5))
l: List[(Int, Int)] = List((95,6), (10,2), (8,5))

scala> l.filterNot({case (x,y)=>x/5<2})
res6: List[(Int, Int)] = List((95,6), (10,2))

scala> l.filterNot({case (x,y)=>x/5<200})
res7: List[(Int, Int)] = List()

我想编写一个实用方法,如果filterNot 没有将列表清空到 List(),则可以包装并返回 List 的第一个元素的 Option 类型,这将是一个元组。如果filterNot 给了我List(),我只想返回None。如果filterNot 给我一个带有项目的List,我想做Option(l(0))。我可以通过常规的 if 检查来做到这一点,但我想知道如何以更实用的方式做到这一点?

【问题讨论】:

  • Some(l(0))Nonel.headOption,顺便说一句

标签: scala scala-collections


【解决方案1】:

更好的选择是使用List.find,它接受一个谓词并返回第一个匹配项:

scala> l find { case (x, y) => x / 5 >= 2 }
res5: Option[(Int, Int)] = Some((95,6))

scala> l find { case (x, y) => x / 5 >= 200 }
res6: Option[(Int, Int)] = None

请注意,我将小于改为大于,因为我们没有否定谓词。

【讨论】:

  • 你想要 >=,而不是 >.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多