Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Scala中的条件从同一集合的元素创建贴图_Scala_Dictionary_Functional Programming_Set_Scala Collections - Fatal编程技术网

根据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
。。。