请考虑Scala中的以下布尔值列表
List(true, false, false, true)
Run Code Online (Sandbox Code Playgroud)
您如何使用foldRight或foldLeft模拟对列表中的所有值执行逻辑AND的功能?
有人可以提供一些例子
实际上习惯了?我假设它们是reduce/fold方法的快捷方式,但是没有关于它们如何在Scala文档中实际使用的示例,并且它们无法在StackOverflow上进行谷歌/搜索.
这是一个新手问题
我有以下代码:
var total = 0L
docs.foreach(total += _.length)
Run Code Online (Sandbox Code Playgroud)
在docs中我有一组带有.length属性的对象
我喜欢这样的东西:
val total = docs.[someScalaMethod](0, (element, acum) => acum + element.length )
Run Code Online (Sandbox Code Playgroud)
我的意思是,一个迭代每个元素传递累加器变量的方法......
我传递的第一个零应该是累加器var的初始值.
如何实现?
我有一组像这样的案例类
abstract class Shape
case class Rectangle(width: Int, height: Int) extends Shape
case class Location(x: Int, y: Int, shape: Shape) extends Shape
case class Circle(radius: Int) extends Shape
case class Group(shape: Shape*) extends Shape
Run Code Online (Sandbox Code Playgroud)
其中基本上Group是一个形状数组.我需要定义一个大小方法来计算矩形,圆形和位置的大小,它直接只返回一个.但我对集团有困难.
object size extends Shape{
def size(s: Any) : Int = s match {
case Rectangle(x,y) => 1
case Group // how to do it? Also having case Group(shape : Shape*) gives an error
case Circle(r) => 1
case Location(x,y,shape) => 1
}
}
Run Code Online (Sandbox Code Playgroud)
我知道对于Group我需要使用map并向左折叠,但我真的无法为它创建逻辑.谢谢
我正处于scala的第二个晚上,我正在抵制用scala写东西的冲动,我曾经在java中做过这些,并试图学习所有的习语.在这种情况下,我希望只使用闭包,映射和列表理解这样的东西来计算平均值.无论这是否是计算平均值的最佳方法,我只想知道如何在scala中执行这些操作仅用于学习目的
这是一个例子:下面的平均方法几乎没有实现.我有几个其他的方法来查找个人用户ID给出的评级使用TraversableLike的查找方法(我认为),但没有更多的是scala特定的,真的.我如何计算给定List [RatingEvent]的平均值,其中RatingEvent.rating是一个双值,我将以类似scala的方式计算该List的所有值的平均值?
package com.brinksys.liftnex.model
class Movie(val id : Int, val ratingEvents : List[RatingEvent]) {
def getRatingByUser(userId : Int) : Int = {
return getRatingEventByUserId(userId).rating
}
def getRatingEventByUserId(userId : Int) : RatingEvent = {
var result = ratingEvents find {e => e.userId == userId }
return result.get
}
def average() : Double = {
/*
fill in the blanks where an average of all ratingEvent.rating values is expected
*/
return 3.8
}
}
Run Code Online (Sandbox Code Playgroud)
经验丰富的scala pro如何填充该方法并使用scala的功能使其尽可能简洁?我知道如何在java中这样做,这是我想要避免的.
如果我在python中这样做,我认为最pythonic的方式是:
sum([re.rating. for re in …Run Code Online (Sandbox Code Playgroud) 我是scala的新手,我只是编写一个简单的函数来反转给定的字符串:
def reverse(s: String) : String
for(i <- s.length - 1 to 0) yield s(i)
Run Code Online (Sandbox Code Playgroud)
yield返回一个scala.collection.immutable.IndexedSeq [Char],并且不能将它转换为String.(或者是别的什么?)
我该怎么写这个功能?
假设,我有一份清单Students.Students有像田name,birth date,grade等你将如何找到Students最好的grade斯卡拉?
例如:
List(Student("Mike", "A"), Student("Pete", "B"), Student("Paul", A))"
我想得到
List(Student("Mike", "A"), Student("Paul", A))
显然,我可以找到max grade(上面列表中的"A")然后filter列表
students.filter(_.grade == max_grade)
此解决方案仅O(N)在列表上运行两次.你能提出更好的解决方案吗?