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

在地图中合并条目,而不使用scala中的循环

  •  2
  • Srivignesh  · 技术社区  · 6 年前

    有人能为scala中的以下用例(可能不使用循环)建议一种在map中合并条目的最佳方法吗?

    从…起

    val map1 = Map(((1,"case0")->List(1,2,3)), ((2,"case0")->List(3,4,5)), ((1,"case1")->List(2,4,6)), ((2,"case1")->List(3)))
    

    Map(((1,"nocase")->List(2)), ((2,"nocase")->List(3)))
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   SCouto    6 年前

    您可以按以下方式执行:

    map1.groupBy(_._1._1).map{case (key, elements) => ((key, "nocase"), elements.values.reduce(_ intersect _ ))}
    

    使用组,您可以按照键的第一个元素对元素进行分组,然后使用map,您可以使用“nocase”字符串构建新键,如您的示例所示。有元素。值获得给定关键帧的所有元素,并可以使用获得预期输出的相交来减少这些元素

    输出:

    Map[(Int, String),List[Int]] = Map((2,nocase) -> List(3), (1,nocase) -> List(2))