根据 Scala 中的条件从同一集合的元素创建一个 Map
Create a Map from the elements of the same set based on condition in Scala
我有一个如下形式的Hashset
,它可能会变大:
var hs = HashSet(("fox", "name"),
("animal", "type"),
("gender", "type"),
("x", "test"),
("x", "nottest"),
("z", "test"),
("z", "nottest"))
从中获取具有以下形式的地图的最佳方法是什么:
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
我有一个如下形式的Hashset
,它可能会变大:
var hs = HashSet(("fox", "name"),
("animal", "type"),
("gender", "type"),
("x", "test"),
("x", "nottest"),
("z", "test"),
("z", "nottest"))
从中获取具有以下形式的地图的最佳方法是什么:
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