我有一个 Map[String, String] 类型的条目映射和一个 Map[String, Map[String, String]] 类型的查找映射。我的目标是在第一张 map 中查找第二张 map 中的匹配项,一旦我找到关键匹配项,我就必须将第一张字典中的值替换为第二张字典中的查找值。这个例子会把事情弄清楚。
到目前为止,我已经想出了一个算法,但我得到了一些奇怪的答案 Some(e) 和 Some(t)。
第一个入口图如下:
val entries = Map("fruit" -> "aaa", "animal" -> "bbb", "person" -> "jjj")
第二张 map 如下:
val lookup = Map("fruit" -> Map("ccc" -> "orange", "aaa" -> "apple"),
"animal" -> Map("zzz" -> "dog", "bbb" -> "cat"))
我期望的结果如下(注意:“person”正确地没有包含在结果中,因为没有匹配项):
val result = Map("fruit" -> "apple", "animal" -> "cat")
我想出的算法如下:
val res = for{ (k, ev) <- entries
lv <- lookup.get(k).get(ev)} yield (k, lv)
这个算法给出了以下结果,我不知道为什么:
Map(fruit -> e, animal -> t)
e 和 t 是从哪里来的?
最佳答案
将其分解成多个组成部分。
for {
(k,v1) <- entries
submap <- lookup.get(k)
v2 <- submap.get(v1)
} yield (k,v2)
//res0: immutable.Map[String,String] = Map(fruit -> apple, animal -> cat)
不确定 e
在哪里和 t
来自您的错误输出。
好的,我明白了。 lv <- lookup.get(k).get(ev)
正在遍历 "apple"
的每个字母和 "cat"
分别,但是因为 Map
中的每个键只能有一个键->值对, 只保留最后一个字母。
关于algorithm - 如何使用第一个 map 的值检索嵌套 map 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56846170/