基于谓词的重复列表元素

时间:2016-05-08 12:47:37

标签: list scala duplicates

我想在列表中复制偶数/奇数元素。

ClassTemplateLoader

我尝试了一些奇怪的东西,因为我不知道我该怎么做。

def even(number: Int): Boolean = {
    if(number%2 == 0) true
    else false
}

这不是我的预期。我只想返回一个列表,其中包含奇数/偶数重复的所有元素。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用flatMap返回每个元素的列表,如果谓词不匹配,则只包含元素本身;如果是,则包含元素重复的列表:

def even(n : Int) : Boolean = n%2 == 0
val l = List(1,2,3)
l.flatMap(n => if(even(n)) List(n,n) else List(n)) // -> List(1, 2, 2, 3)

答案 1 :(得分:1)

您可以过滤偶数的第一个集合,而不是与原始列表连接:

scala> var l = List(1,2,3)
l: List[Int] = List(1, 2, 3)

scala> l.filter(_ % 2 == 0) ++ l
res14: List[Int] = List(2, 1, 2, 3)

如果您想要排序List[Int],可以在连接后应用它:

scala> l.filter(_ % 2 == 0) ++ l sorted
res15: List[Int] = List(1, 2, 2, 3)

这为您List[Int]的每场比赛节省了新even的分配。您只过滤所需的元素,创建一个List[Int],然后将其与原始元素连接。