有两种方法可以获得随机访问Scala集合的第一个元素(例如Vector):
1)头
myCollction.head
2)申请
myCollction(0)
从我收集的内容(来自Scala 2.10.4来源)
首先检查集合是否为空并在调用apply(0)
之前抛出异常override /*IterableLike*/ def head: A = {
if (isEmpty) throw new UnsupportedOperationException("empty.head")
apply(0)
}
应用首先检查索引的边界并在获取元素之前抛出IndexOutOfBoundsException
def apply(index: Int): A = {
val idx = checkRangeConvert(index)
getElem(idx, idx ^ focus)
}
private def checkRangeConvert(index: Int) = {
val idx = index + startIndex
if (0 <= index && idx < endIndex)
idx
else
throw new IndexOutOfBoundsException(index.toString)
}
首选方式是什么? (实际利益/陷阱,而非个人偏好)
答案 0 :(得分:1)
通常首选的方式是(但这取决于具体情况)
myCollection.headOption
.headOption
返回Option值,其中option是head,当head存在时,如果集合为空则为none。
使用headOption不会抛出异常,因为集合是空的,因此您没有任何意外的惊喜。
当基础集合为空时,.head
和零索引都抛出异常。
它还取决于上下文,如果你想要失败,如果head元素不存在那么.head
是一个很好的方法,但很多情况下你想提供一个替代的集合中没有任何元素
答案 1 :(得分:1)
我认为选择任何集合的第一个元素(包括Vector
等随机访问集合)最常用的方法是使用返回headOption
的{{1}}方法在抛出异常的情况下。这种方法的好处是调用者可以在None
上进行模式匹配并做出适当的响应。