- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试 Scala 中的东西,试图习惯函数式编程以及再次学习一门新语言(自上次以来已经有一段时间了)。
现在给出一个字符串列表,如果我想将它们合并成一个长字符串(例如 "scala", "is", "fun" => "scalaisfun"
),我想一种方法是做一个 foldRight
并对各个元素应用连接。另一种方法,诚然要简单得多,就是调用mkString
。 .
我在 github 上查了一下,但找不到相应函数的源代码(任何帮助将不胜感激),所以我不确定这些函数是如何实现的。从我的脑海中,我认为 mkString
更灵活但感觉可能有foldRight
在某处实现。这有什么道理吗?
否则,scaladocs 会提到 mkString
调用toString
对于每个相应的元素。看到它们已经是开始的字符串,这可能是 mkString
的一个负面因素。在这种特殊情况下。关于两种方法的优缺点,在性能、简单/优雅等方面有什么评论吗?
最佳答案
简单回答:使用 mkString
.someString.toString
returns同一个对象。mkString
用单个 StringBuilder
实现它只创建 1 个新字符串。与 foldLeft
您将创建 N-1
新的字符串。
您可以使用 StringBuilder
在 foldLeft
,它将与 mkString
一样快, 但是 mkString
更短:
strings.foldLeft(new StringBuilder){ (sb, s) => sb append s }.toString
strings.mkString // same result, at least the same speed
关于scala - 使用 mkString 与 foldRight 合并字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447681/
有人可以告诉我这个函数定义有什么问题吗? def incr[Int](l: List[Int]): List[Int] = l.foldRight(List[Int]())((x,z) => (x
我是使用 Shapeless 的新手,我正在尝试使用 Shapeless 来自动生成类型类并折叠 HList。 我的目标是渲染 HList如 (a, b, c, d)使用 scalaz.Show 的类
我在 Programming in Scala 中阅读了有关折叠技术的信息书并遇到了这个片段: def reverseLeft[T](xs:List[T]) = (List[T]() /: xs) {
虽然经过Functional Programming in Scala ,我遇到了以下代码片段: def foldRight[A](z: => B)(f: (A,=>B) => B):B = unco
我刚刚发现 scala(我在 2.12 上)提供了完全不同的 实现。 foldRight 为 不可变列表 和 可变列表 . 不可变列表(List.scala): override def foldRi
A型水平foldRight工作正常 (getLabelWithValues),以及后续类型级别 map (getValues) 也可以正常工作。如果我将两者结合在一种方法 (getValuesFull
在一个在线类(class)中,有人说 foldLeft和 foldRight等效于 的运算符结合和交换 . 其中一名学生坚持认为此类运算符只需要具有关联性。所以这个属性对于函数组合和矩阵乘法等操作应该
以前,Nicolas Rinaudo回答了我关于 Scala 的 List foldRight Always Using foldLeft? 的问题 目前正在学习Haskell,我的理解是foldRi
我试试这个代码 println(listOf(1, 2, 4).foldRight(0) { total, next -> total - next
我正在使用 libraryDependencies += "com.chuusai"%% "shapeless"% "2.2.4" 目前我有像这样的模型 HList 类型 sealed trait S
我目前正在尝试 Scala 中的东西,试图习惯函数式编程以及再次学习一门新语言(自上次以来已经有一段时间了)。 现在给出一个字符串列表,如果我想将它们合并成一个长字符串(例如 "scala", "is
为什么编译器不翻译 Scala (1,2,3,4,5,6).foldRight(10)(_ * _) 相当于 Java final int[] intArray = new int[]{1,2,3,4
为什么foldLeft拿 f: (B, A) => B 并折叠右取 f: (A, B) => B foldLeft本来可以写成 f: (A, B) => B.我试图理解参数顺序差异的原因。 最佳答案
在经过时Functional Programming in Scala ,我遇到了这个问题: Can you right foldLeft in terms of foldRight? How abo
注意:我使用的是 Scala 2.8——这会是一个问题吗? 为什么我不能像 foldLeft 或 foldRight 一样使用 fold 函数? 在 Set scaladoc它说: The resul
我一直在用 .foldRight() 递归地实现高阶函数。喜欢 any , all , 和 takeWhile作为实践,但 dropWhile一直难以捉摸。 _Collections.kt具有命令式的
这个问题来源于我之前的问题:What does HList#foldLeft() return? 我有这个场景: class Cursor { } trait Column[T] { def r
我正在学习 Scala,并且是函数式编程领域的新手。我看到大多数方法,例如 foldRight、map、filter、reduce ... 总是可以由 foldLeft 编写(由 foldLeft 编
我必须仅使用 foldRight、foldLeft 和 unfold 来实现 Map 函数。这意味着我必须遍历列表中的每个元素并对其应用函数 f。 我已经声明了我自己的列表如下: abstract c
我是一名优秀的程序员,十分优秀!