代码之家  ›  专栏  ›  技术社区  ›  zella

如何以功能性风格合并两个不同的集合?

  •  1
  • zella  · 技术社区  · 8 年前

    val one = Seq(("1", 123), ("3", 555), ("2", 31))
    
    val two = Seq("1", "4", "2")
    

    我需要在第一个序列后面附加第二个序列(顺序无关紧要),例如:

    val result = Seq(("1", 123), ("2", 31), ("3", 555), ("4", 0)) //0 - constant
    

    我可以通过转换到集合和使用包含检查进行迭代来实现,但这非常难看。如何以正确的“功能性”风格实现这一点?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Shaido MadHadders    8 年前

    我不确定什么是正确的“功能性”风格。但是,您可以通过使用轻松地将这两个集合附加在一起 Map .

    val result = (two.map((_,0)).toMap ++ one).toSeq
    

    首先是 two one 将添加集合,这将覆盖 到a Seq

        2
  •  1
  •   fcat    8 年前

    val oneKeys = one.map(_._1)
    val result = one ++ two.filterNot(x => oneKeys.contains(x)).map(x => (x,0))
    

    val oneKeys = one.map(_._1) //gets the keys of each tuple from list `one`
    two.filterNot(x => oneKeys.contains(x))  //selects the keys that list `one` does not contain
       .map(x => (x,0))                            //converts them into tuples by adding value `0`
    

    ++ 操作基本上合并了两个不同的 Seq 并返回结果

    推荐文章