【问题标题】:Removing elements from a map of type (Int, ListBuffer(Int))从类型 (Int, ListBuffer(Int)) 的映射中删除元素
【发布时间】:2017-12-28 11:07:03
【问题描述】:

我有LinkedHashMaps 类型:

val map1 = LinkedHashMap(1 -> 1, 2 -> (1,2), 3 -> (1,2,3)) val map2 = LinkedHashMap(2 -> 2, 3 -> (2,3), 5 -> (2,3,5))

其中整数是图的节点ID,列表是该节点的路径。我想实现删除节点的情况。假设我要删除节点 3,我必须执行两个操作:删除每个映射中 key = 3 的元素,删除列表中包含 3 的元素。如何在scala中做到这一点?

【问题讨论】:

    标签: scala linkedhashmap listbuffer


    【解决方案1】:

    如果您像以前一样定义地图,

    val map1 = LinkedHashMap(1 -> 1, 2 -> (1,2), 3 -> (1,2,3))
    

    您没有key: Intvalue: List[Int],但您有key: Intvalues: Any

    scala> val map1 = LinkedHashMap(1 -> 1, 2 -> (1,2), 3 -> (1,2,3))
    // map1: scala.collection.mutable.LinkedHashMap[Int,Any] = Map(1 -> 1, 2 -> (1,2), 3 -> (1,2,3))
    

    为了满足您的要求,您应该像下面这样定义您的地图,

    scala> val map1 = LinkedHashMap(1 -> List(1), 2 -> List(1,2), 3 -> List(1,2,3))
    // map1: scala.collection.mutable.LinkedHashMap[Int,List[Int]] = Map(1 -> List(1), 2 -> List(1, 2), 3 -> List(1, 2, 3))
    

    现在,如果你想删除一个节点3

    scala> val map2 = map1.filter({
         |   case (key, list) => key != 3 && !list.contains(3)
         | })
    // map2: scala.collection.mutable.LinkedHashMap[Int,List[Int]] = Map(1 -> List(1), 2 -> List(1, 2))
    

    【讨论】:

    • 谢谢!如果我的 LinkedHashMap 是图中的顶点属性怎么办?要从每个节点的地图中删除节点 3,我必须使用类似:graph.vertices.filter({ | case (key,list) => key != 3 && !list.contains(3) | }) 但这不是正确的语法。
    • 显然顶点的类型是val vertices: RDD[(VertexId, LinkedHashMap[Int, ListBuffer[Int]])]
    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2015-06-15
    • 2019-08-23
    • 1970-01-01
    • 2012-04-06
    • 2023-03-15
    相关资源
    最近更新 更多