scala在列表中设置空行,设置空值

时间:2015-03-10 12:12:50

标签: eclipse scala

我有一个关于将结果设置为空(即没有)的问题,我在过去的问题中进行了研究,但没有找到一个好的解决方案。

问题很简单,比如我有一个Int列表和Bool列表

val a = List(1,2,3,4,5)
val b = List(F,T,T,F,F)

我想拉链并做一些映射:

val result = (a,b).zipped.map((x,y)=>(if(b) a else ())

我假设我正在做上面正确的事情,它接受a和b的每个元素并执行操作,如果b为真,则返回a,否则不返回任何内容。我希望结果只有数字(2,3)。但是,我的Eclipse似乎表明生成的结果是List [AnyVal]而不是List [Int]。

我已经测试了相同的设置,但是使用了Lists,当我将b设置为List()时,该过程正常工作,Eclipse正在理解我想要设置一个空List,所以当我错误时我迷失了...

提前致谢

3 个答案:

答案 0 :(得分:3)

你想要val result = (a zip b).filter(_._2).map(_._1)map永远不会过滤,因此请勿尝试从其参数返回(),并希望它会过滤。

答案 1 :(得分:1)

val a = List(1, 2, 3, 4, 5)
val b = List(false, true, true, false, false)

a.zip(b)         // zip two lists
  .filter(_._2)  // filter if second element is true
  .map(_._1)     // grab first element of tuple

// List[Int] = List(2, 3)

答案 2 :(得分:0)

您还可以使用collect,它只会保留与模式匹配的元素。您可以将其视为map,它会丢弃未定义的任何内容。

val a = List(1, 2, 3, 4, 5)
val b = List(false, true, true, false, false)

(a zip b) collect { case (x, true) => x }