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
如果您使用的是猫库)。
我有一个这样的列表:
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
如果您使用的是猫库)。