我有一个以下形式的Hashset
,它可能会变大:
var hs = HashSet(("fox", "name"),
("animal", "type"),
("gender", "type"),
("x", "test"),
("x", "nottest"),
("z", "test"),
("z", "nottest"))
使用以下形式获取 map 的最佳方式是什么:
HashMap (("x", "test")-> ("x", "nottest"),("z", "test") ->("z", "nottest"))
即映射来自同一集合的元组,其中它们具有相同的第一个元素,第二个元素以“not”为前缀。
最佳答案
您可以创建所有可能的对并过滤掉原始集中不存在的对:
hs.map { case(k, v) => (k, v) -> (k, "not" + v) }
.filter { case(pos, neg) => hs.contains(neg) }
.toMap
编辑:
如果集合变得非常大,那么我们可以轻松更改顺序 - 首先检查并过滤带有否定的对,然后映射:
hs.filter { case(k, v) => hs((k, "not" + v)) }
.map { case(k, v) => (k, v) -> (k, "not" + v) }
.toMap
关于scala - 根据 Scala 中的条件从同一集合的元素创建 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62480355/