gpt4 book ai didi

list - 针对元组列表迭代现有 map

转载 作者:行者123 更新时间:2023-12-01 03:33:44 25 4
gpt4 key购买 nike

我有一个元组列表,我必须更改包含这些元组的映射中的值。因此,如果我有一个列表,例如 List((0,2), (0,3)) map 看起来像这样:Map((0,2) => List(1,2,3), (0,3) => List(1,2)) ,我需要使用列表中列出的元组访问匹配的映射元组,然后从映射中删除一个数字。

所以在上面的例子中,如果我想删除 2从映射中,我会得到 Map((0,2) => List(1,3), (0,3) => List(1)) .

设计明智,我正在考虑模式匹配 map ,但我读过一些答案,说这可能不是最好的方法。对我来说困难的部分是它必须是不可变的,所以我在考虑模式匹配列表,获取 map 值,更改值,然后重新创建 map 并再次递归调用该函数。你怎么看这个实现?

最佳答案

这可能是一种删除 2 的方法来自您的 Map :

val newMap = oldMap.mapValues(list => list.filter(_ != 2))

或更一般地说:
def filterInMap(element: Int, oldMap: Map[(Int,Int),List[Int]]) = 
oldMap.mapValues(list => list.filter(_ != element))

这样根本不需要改变任何东西。 mapValues仅转换您的 Map 的值并返回原始副本而不对其进行任何变异。 filter然后通过只允许与我们想要删除的元素不匹配的元素来完成工作。

奖励:更普遍的是:
def filterInMap[A](element: A, oldMap: Map[(A,A),List[A]]) = 
oldMap.mapValues(list => list.filter(_ != element))

关于list - 针对元组列表迭代现有 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com