gpt4 book ai didi

scala - 将字母映射到它出现的单词

转载 作者:行者123 更新时间:2023-12-04 13:18:07 25 4
gpt4 key购买 nike

我是 scala 的新手,我正在尝试编写一个函数,它接受一个输入字符串并将字母映射返回到它们出现的单词。

例如给定输入字符串“this is demo”,我想要输出映射 [''->["this"],'h'->["this",'i'->["this","is"]。 ..等等。

我可以用传统方式编写这段代码,但是如何使用 map、groupby、flatmap 等 scala 结构以函数式方式编写这段代码?

最佳答案

"this is demo"
.split(" ")
.flatMap(w => w.map(c => c -> w))
.groupMap(_._1)(_._2)
// HashMap(e -> Array(demo), s -> Array(this, is), t -> Array(this), m -> Array(demo), i -> Array(this, is), h -> Array(this), o -> Array(demo), d -> Array(demo))
  • 第一步是获取一个元组数组,表示每个字符来自哪个单词。这可以通过首先将句子拆分为单词并为每个单词的每个字符生成一个包含字符及其单词的元组来实现 (.map(w => w.map(c => c -> w)) )。由于这给了我们一个数组数组,我们可以使用 flatMap 将它们展平为元组的单级数组(生成 Array((t,this), (h,this) , (i,this), ...)).

  • 第二步包括按字符对这些字符和单词的元组进行分组,并将分组的值映射到关联的单词。这可以通过 groupMap 实现(它将 group 的元组按它们的第一部分(按字符)和 map 将元组分组到它们的第二部分(单词))。如果您使用的是较早的 Scala 版本(2.13 之前),则必须将 groupMap 替换为 groupBymapValues 的组合: .groupBy(_._1).mapValues(_.map(_._2))

关于scala - 将字母映射到它出现的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57656237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com