scala - 根据 Scala 中的条件从同一集合的元素创建 Map

标签 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"))

使用以下形式获取 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/

相关文章:

scala - 名称值/表达式保存在函数程序中的什么位置?

scala - 无法读取 Freemarker 模板中的对象值

java - Play 后出现编译错误!框架新应用指南

c# - Linq-已添加具有相同 key 的随机项目错误

c++ - 使用构造函数初始化 STL 映射

data-structures - 关系数据库的高效持久数据结构

java - 特性:Scala 和 Java 之间的互操作,从 Java 访问 val

list - 无法推断参数类型

r - 如何根据 R 中的字典将带有代码的 data.frame 映射到字符串

scala - 如何实现TCO的递归