- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找出一组线条中最长的线条的长度。
val lines = Source.fromFile(args(0)).getLines() //a collection of strings
val longestLine = lines.reduceLeft( (a,b) =>
if(a.length > b.length) a.length else b.length )
但这会导致以下错误:
/home/jesvin/dev/scala/readfile.scala:11: error: type mismatch;
found : Int
required: String
if(a.length > b.length) a.length else b.length )
^
/home/jesvin/dev/scala/readfile.scala:11: error: type mismatch;
found : Int
required: String
if(a.length > b.length) a.length else b.length )
^
two errors found
我在某些位置尝试了一些显式返回语句和类型转换,但没有用。
我使用的 reduceLeft
错了吗?
最佳答案
Am I using
reduceLeft
wrong?
是的,您想要fold
的行为而不是reduce
的行为。 reduce
生成与集合的类型参数相同的类型 - 它是 fold
可以生成另一种类型。
scala> Seq("a","b","cd").reduceLeft(_+_)
res24: String = abcd
这里,Seq 的类型参数是 String - 因此 reduceLeft
也产生一个 String。
scala> Seq("a","b","cd").foldLeft(0)(_+_.length)
res25: Int = 4
相比之下,foldLeft
可以生成另一种类型 - 在本例中为 Int。
在您的示例中,seq.max
就是您想要的。尝试自己实现它,然后在获得它时查看源代码以验证您的实现是否正确。
提示:reduce
是一个fold
,其实现如下:
def reduce(f: (A, A) => A) =
tail.fold(head)(f)
这就是为什么 reduce
在调用空集合时抛出异常的原因。
关于scala - 为什么 reduceLeft 提示类型不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958169/
我有一个练习,使用 sliding,map,reduceLeft 检查两个相邻元素是否有序。例如: val seq1 = Seq(1,2,2,4) isOrdered(seq1)(_ Boolean
我正在尝试找出一组线条中最长的线条的长度。 val lines = Source.fromFile(args(0)).getLines() //a collection of strings
reduceLeft的签名在一些 Seq[A]是 def reduceLeft [B >: A] (f: (B, A) => B): B A的类型是已知的,但下限 >:告诉我们 B可以是 A 的任何父
进一步my other question关于reduceLeft,reduceLeft在Seq上的签名是 def reduceLeft [B >: A] (f: (B, A) ⇒ B): B 我们可以
我有一个 ConfigRule 特征,它有 transform 方法作为 trait ConfigRule { final def transform(doc: Node): Node = { .
我了解如何在简单的整数列表上使用 reduceLeft,但尝试在 case 类对象失败时使用。 假设我有: case class LogMsg(time:Int, cat:String, msg:
以下签名在 Scala 中有效且常用: trait Collection[A] { def reduceLeft [B >: A] (f: (B, A) => B): B } 但是,由于 >:
说,我想更好地了解什么 reduceLeft方法适用于 Array[String] scaladoc说: 好的,我必须再问一次,这个方法有什么作用?更重要的是,如果我不能依靠 scaladoc 来告诉
这个问题在这里已经有了答案: What is happening with 0.asInstanceOf[B] in Scala reduceLeft implementation (2 个答案)
考虑这个类: case class Person(val firstName: String, val lastName: String, age: Int) val persons = Pers
给定一个简单的序列: scala> val a = Seq(1.0,2.0,3.0) res8: Seq[Double] = List(1.0, 2.0, 3.0) 让我们把它们加起来! scala>
我想确保我是否可以通过使用 reduceLeft 而不是 foldLeft 来完成此操作。我正在列表中搜索给定的数字 val included = List(46, 19, 92).foldLeft(
A 和我正在用 circe 做一些工作来编码/解码一些 ADT,我们遇到了一些我们根本不理解的功能。 circe 文档中给出的示例按预期工作,但在深入研究后 - 尚不清楚解码示例工作的原因,因此我们很
下面是 Scala 的 TraversableOnce 的 reduceLeft 方法的源代码特征。读取 var acc: B = 0.asInstanceOf[B] 的行发生了什么? ? 对我来说,
我是一名优秀的程序员,十分优秀!