Tej*_*eni 11 functional-programming scala
我是Scala的新手,但对Java很老,对使用像"Haskell"这样的FP语言有一定的了解.
在这里,我想知道如何使用Scala实现这一点.数组中有一个元素列表,所有这些元素都是字符串,我只想知道是否有一种方法可以用Sc方式在Scala中完成.这是我当前的版本有效...
def checkLength(vals: Array[String]): Boolean = {
var len = -1
for(x <- conts){
if(len < 0)
len = x.length()
else{
if (x.length() != len)
return false
else
len = x.length()
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
而且我很确定在Scala/FP中有更好的方法可以做到这一点......
sep*_*p2k 21
list.forall( str => str.size == list(0).size )
Run Code Online (Sandbox Code Playgroud)
编辑:这里的定义与possilbe一样通用,并且还允许检查除长度以外的属性是否对所有元素都相同:
def allElementsTheSame[T,U](f: T => U)(list: Seq[T]) = {
val first: Option[U] = list.headOption.map( f(_) )
list.forall( f(_) == first.get ) //safe to use get here!
}
type HasSize = { val size: Int }
val checkLength = allElementsTheSame((x: HasSize) => x.size)_
checkLength(Array( "123", "456") )
checkLength(List( List(1,2), List(3,4) ))
Run Code Online (Sandbox Code Playgroud)
由于每个人似乎都很有创意,我也会很有创意.:-)
def checkLength(vals: Array[String]): Boolean = vals.map(_.length).removeDuplicates.size <= 1
Run Code Online (Sandbox Code Playgroud)
请注意,removeDuplicates很可能会distinct在Scala 2.8 上命名.