什么是Scala查找Array的所有元素是否具有相同长度的方法?

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)

  • +1是的.难道lattern术语甚至不是`list forall(_.size == list(0).size)`? (2认同)

Dan*_*ral 7

由于每个人似乎都很有创意,我也会很有创意.:-)

def checkLength(vals: Array[String]): Boolean = vals.map(_.length).removeDuplicates.size <= 1
Run Code Online (Sandbox Code Playgroud)

请注意,removeDuplicates很可能会distinct在Scala 2.8 上命名.