gpt4 book ai didi

scala - 如何简化 bool 元素的 foldLeft 操作?

转载 作者:行者123 更新时间:2023-12-01 07:45:11 25 4
gpt4 key购买 nike

我用这个方法判断一个字符串是否全部大写

def isAllUpperCase(s: String): Boolean = 
s.foldLeft(true)((res, ch) => res && ch.isUpper)

IntelliJ 警告说这个对集合的操作可以被简化。可悲的是,我是一个 Scala 菜鸟。有什么想法吗?

最佳答案

foldLeft 开始,考虑给定字符串 s

(true /: s)(_ && _.isUpper)

或等效地,

s.foldLeft(true)(_ && _.isUpper)

对于这个特定的问题,还可以考虑forall,如下所示,

"abc".forall(_.isUpper)
res: Boolean = false

"Abc".forall(_.isUpper)
res: Boolean = false

"ABC".forall(_.isUpper)
res: Boolean = true

也就是说,只有当每个仔细检查的元素的计算结果都为真时,它的计算结果才为真。

然后,

implicit class RichUppercase(val s: String) extends AnyVal {
def allUpper() = s.forall(_.isUpper)
}

等等

"abc".allUpper
res: Boolean = false

"ABC".allUpper
res: Boolean = true

更新

另一种方法依赖于查找原始字符串和大写字符串之间的差异,就像这样,

val a = "Abc"
a: String = abc

a diff a.toUpperCase
res: String = bc

a.toUpperCase diff a.toUpperCase
res: String = ""

因此生成的空字符串意味着字符串中的所有字符都是大写的。

关于scala - 如何简化 bool 元素的 foldLeft 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24030004/

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