根据Scala中的条件从同一集合的元素创建贴图
我有一个如下形式的根据Scala中的条件从同一集合的元素创建贴图,scala,dictionary,functional-programming,set,scala-collections,Scala,Dictionary,Functional Programming,Set,Scala Collections,我有一个如下形式的Hashset,它可能会变大: var hs = HashSet(("fox", "name"), ("animal", "type"), ("gender", "type"), ("x", "test"), ("x", "nottest"), ("z", "test"), ("z", "nottest")) 使用以下形式从中获取地图的最佳方式是什么: HashMap (("x", "test")-> ("x", "not
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"))
i、 e映射同一集合中的元组,其中元组具有相同的第一个元素,第二个元素的前缀为“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
集合可能会变大,有没有办法不创建所有对?另外,元组可能存在,但其否定元组可能存在,反之亦然(我应该在问题中提到这一点,将对其进行编辑)@Usr654789简单,我们可以更改操作顺序,请查看我的编辑;>@Usr654789你运行了吗?它会产生你想要的确切结果。无论是否存在(某事物,非某事物)
(某事物,某事物)
。检查一种方法就足够了…刚刚做了是的,结果被正确过滤,但仍然是一个哈希集而不是哈希映射:哈希集(((z,test),(z,nottest)),((x,test),(x,nottest))@Usr654789啊,忘了它,只需调用toMap
。。。