如何从scala中的地图更改键
How to change keys from a map in scala
如何在没有任何变量完整功能的情况下从地图更改以下键
HashMap(false -> List(20, 15, 20, 17), true -> List(50, 25, 45, 21, 100, 2000, 2100))
至
HashMap("String1" -> List(20, 15, 20, 17), "String2" -> List(50, 25, 45, 21, 100, 2000, 2100))
我尝试使用 map 并能够将键更改为相同的字符串,但不能更改为不同的字符串。
您可以将映射应用于所有项目,但只关注键:
yourMap.map({ case (a, b) => (f(a), b) })
您可以将 f
定义为函数或简单的常量映射,例如:
Map(false -> "String1", true -> "String2")
综合起来:
object HelloWorld {
def main(args: Array[String]) {
val m = Map(false -> List(20, 15, 20, 17), true -> List(50, 25, 45, 21, 100, 2000, 2100))
val f = Map(false -> "String1", true -> "String2")
val x = m.map({ case (a, b) => (f(a), b) })
System.out.println(x)
}
}
产生预期结果:
Map(String1 -> List(20, 15, 20, 17), String2 -> List(50, 25, 45, 21, 100, 2000, 2100))
如果您喜欢单行代码,您也可以避免使用单独的映射/函数:
yourMap.map({
x => x match {
case (false, v) => ("String1", v)
case (true, v) => ("String2", v)
}
})
另一种方法是只处理元组的左侧:
yourMap.map({case (a, b) =>
(a match {
case false => "String1"
case true => "String2"}, b)})
为了完整起见,如果你的唯一元素真的是 true
和 false
你可以这样做:
yourMap.map({case (a, b) => (if (a) "String2" else "String1", b)})
使用 pattern matching anonymous function directly:
hashM
.map {
case (true, ints) => "String1" -> ints
case (false, ints) => "String2" -> ints
}
如果您使用非详尽的模式匹配,即您还想从集合中安全地过滤掉一些元组,然后使用 collect
:
hashM
.collect {
case (true, ints) => "String1" -> ints
}
你会到达这里:
Map(String1 -> List(50, 25, 45, 21, 100, 2000, 2100))
这可能是我能想到的最易读的解决方案。
如何在没有任何变量完整功能的情况下从地图更改以下键
HashMap(false -> List(20, 15, 20, 17), true -> List(50, 25, 45, 21, 100, 2000, 2100))
至
HashMap("String1" -> List(20, 15, 20, 17), "String2" -> List(50, 25, 45, 21, 100, 2000, 2100))
我尝试使用 map 并能够将键更改为相同的字符串,但不能更改为不同的字符串。
您可以将映射应用于所有项目,但只关注键:
yourMap.map({ case (a, b) => (f(a), b) })
您可以将 f
定义为函数或简单的常量映射,例如:
Map(false -> "String1", true -> "String2")
综合起来:
object HelloWorld {
def main(args: Array[String]) {
val m = Map(false -> List(20, 15, 20, 17), true -> List(50, 25, 45, 21, 100, 2000, 2100))
val f = Map(false -> "String1", true -> "String2")
val x = m.map({ case (a, b) => (f(a), b) })
System.out.println(x)
}
}
产生预期结果:
Map(String1 -> List(20, 15, 20, 17), String2 -> List(50, 25, 45, 21, 100, 2000, 2100))
如果您喜欢单行代码,您也可以避免使用单独的映射/函数:
yourMap.map({
x => x match {
case (false, v) => ("String1", v)
case (true, v) => ("String2", v)
}
})
另一种方法是只处理元组的左侧:
yourMap.map({case (a, b) =>
(a match {
case false => "String1"
case true => "String2"}, b)})
为了完整起见,如果你的唯一元素真的是 true
和 false
你可以这样做:
yourMap.map({case (a, b) => (if (a) "String2" else "String1", b)})
使用 pattern matching anonymous function directly:
hashM
.map {
case (true, ints) => "String1" -> ints
case (false, ints) => "String2" -> ints
}
如果您使用非详尽的模式匹配,即您还想从集合中安全地过滤掉一些元组,然后使用 collect
:
hashM
.collect {
case (true, ints) => "String1" -> ints
}
你会到达这里:
Map(String1 -> List(50, 25, 45, 21, 100, 2000, 2100))
这可能是我能想到的最易读的解决方案。