Reducing/Folding Scala 中 Map[String,Boolean] 的字符串列表

Reducing/Folding a List of Strings to a Map[String,Boolean] in Scala

我有一个这样的列表:

val objectKeys = List("Name","Place","Animal","Thing");

我想将其缩减为 Map[String,Boolean],其中 Boolean 为 element.size < 8

这是我写的:

val mappedObject = objectKeys.fold(Map[String,Boolean])((map,key) => map + (key -> key.size < 8))

这给了我以下错误:

value + is not a member of Object, but could be made available as an extension method.

value size is not a member of Object

我对 fold 的理解是它采用默认参数并减少它周围的整个值,但在这种情况下似乎不起作用。谁能帮我解决这个问题?

理想的映射对象应该是这样的:

val mappedObject = Map[String,Boolean]("Name"->true,"Place"->true,"Animal"->true,"Thing"->true)

等效的 Javascript 实现将是:

const listValues = ["Name","Place","Animal","Thing"];
const reducedObject = listValues.reduce((acc,curr) => {acc[curr] = curr.length < 8;
             return acc;
},{});

我认为在这种情况下,您应该 map 到一个包含您的密钥的元组并进行布尔检查,然后通过 toMap 方法将其转换为 Map[String, Boolean],如下所示。

objectKeys.map(key => (key, key.length < 8)).toMap

如果你真的想折叠起来,那很容易做到:

objectKeys.foldLeft(Map.empty[String, Boolean]) { (acc, key) =>
  acc + ((key, key.length < 8))
}

就是说,我同意 Ivan 的观点。 map 显然是更好的解决方案(或者 fproduct 如果您使用的是猫库)。