如何检查列表是否包含所有相同的值?

Dee*_*abi 11 scala list apache-spark

我有一个List[<DataType>]输入.我想检查列表是否包含所有相同的值(不是数据类型).

在Scala中是否有内置方法或直观方式来执行此操作,而不是迭代列表和检查.

jwv*_*wvh 17

这将在第一个非等于元素上终止.元素类型必须支持像==或的比较器!=.

lst.forall(_ == lst.head)  // true  if empty or all the same
lst.exists(_ != lst.head)  // false if empty or all the same
Run Code Online (Sandbox Code Playgroud)

  • 它简洁但我不认为它更有效率.对于统一的集合(所有值相等),它可能是_little_更好,但如果集合不统一则肯定更糟,因为A)它不会提前终止,而B)进入`Set`的每个元素都必须与"Set"中已有的每个元素进行比较.如果前两个元素不相等,则每个后续元素将与**Set中已经存在的两个**元素进行比较.(BTW,在惯用的Scala中很少见到`return`语句.) (2认同)

aww*_*smm 5

一种(低效但优雅的)方式是

List(1, 2, 2, 1, 1).distinct.length == 1 // returns false
List(1, 1, 1, 1, 1).distinct.length == 1 // returns true
List().distinct.length == 1 // empty list returns false
Run Code Online (Sandbox Code Playgroud)

请注意,它们必须属于同一类型

List(4, 4.0, "4").distinct.length == 1 // returns false
Run Code Online (Sandbox Code Playgroud)

  • 这可能非常低效 (3认同)