gpt4 book ai didi

Scala - 创建一组所有可能的字符串减去单词中的一个剪切字母

转载 作者:行者123 更新时间:2023-12-02 05:37:20 25 4
gpt4 key购买 nike

我还在学习scala。如果我有一句话

val word = "abcd"

我要创作

Map("bcd","acd","abd","abc")

到目前为止我试过:

  println(word.map(word.split(_).foldLeft("")(_+_)))

但如果我在单词中有重复的字符,它就会失败。

请帮忙。

最佳答案

这不一定是最有效的方法,但您可以使用 initstails 方法非常干净地完成此操作,而无需处理索引,这可以说是“功能较少”:

scala> val word = "abcd"
word: String = abcd

scala> (word.inits.toList.tail.reverse zip word.tails.toList.tail).map {
| case (x, y) => x + y
| }
res0: List[String] = List(bcd, acd, abd, abc)

它将按预期处理重复项。

要了解其工作原理,请考虑以下内容:

scala> word.inits foreach println
abcd
abc
ab
a


scala> word.tails foreach println
abcd
bcd
cd
d

从那里开始,只需将两者结合起来即可获得所需的结果。


以下是一个更高级的解决方案,它使用 Scalaz图书馆实现zippers ,它提供了一种非常简洁的方法来解决这个问题:

import scalaz._, Scalaz._

"abcd".toList.toZipper.map(
_.cobind(z => (z.lefts.reverse ++ z.rights).mkString).toList
)

这将返回 Some(List(bcd, acd, abd, abc)),其中可选包装表示空 zipper 没有意义的事实。事实上,您可能希望以相同的方式为您的解决方案建模(如果您打算使其更通用),因为空字符串中的“遗漏一个”也没有意义。

如果您不在乎,只想让空字符串产生一个空列表,您可以在此处附加 getOrElse Nil

关于Scala - 创建一组所有可能的字符串减去单词中的一个剪切字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814416/

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