【问题标题】:First element in natural ordering from Scala SetScala Set 自然排序中的第一个元素
【发布时间】:2016-10-19 11:40:55
【问题描述】:

我有 Scala 不可变 Set

Set("c", "b", "a")

我想从中获取自然排序的第一个元素。

适合我的代码是

TreeSet(set.toList: _*).firstKey

虽然它不是很可读。有没有更短/更简单的解决方案?

【问题讨论】:

  • 为什么不Set("c", "b", "a").headOption
  • “自然排序”是什么意思?
  • @JensSchauder 我理解它是为 Java 类型定义的:docs.oracle.com/javase/tutorial/collections/interfaces/…
  • @cchantep 在这种情况下它返回Some(c),对于我的集合,我希望得到a 或者如果集合为空则异常
  • 使用选项更安全,更惯用

标签: scala set scala-collections


【解决方案1】:

除非我完全忽略了“自然排序”的意思,否则我认为这只是Set.min

Set("c", "b", "a").min 
//> res0: String = a

根据需要在空集上例外:

Set[String]().min
//> java.lang.UnsupportedOperationException: empty.min

【讨论】:

  • 自然排序定义在docs.oracle.com/javase/tutorial/collections/interfaces/… 我希望,但不确定是否有等效的Scala
  • 是的,这是一样的。 min 使用隐式 Ordering 但文档说这相当于 Ordered 并且 that 的文档说“有序应该用于具有单一自然排序的数据(如整数)而 Ordering 允许多个 ordering 实现。如果需要,Ordering 实例将被隐式创建。所以min 会给你自然排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多