2013-07-21 65 views
1

什麼是在集合中查找元素索引的優雅方法?現在我實現了這樣的方法:獲取元素索引用於Iterable

def getIndexForValue[T] (value: T, collection: Iterable[T]): Option[Int] = { 
    val pair = collection.zipWithIndex.find(_._1 == value) 
    if (pair.isDefined) Some(pair.get._2) else None 
    } 

它可以用更優雅的方式重寫嗎?由於

回答

3

只是

collection.indexOf(value) 

注意索引沒有意思是,如果集合不是序列的亞型。

如果你真的想要得到任何集合的index,你可以使用

collection.toSeq.indexOf(value) 

後或在某開始索引查找某個值的第一次出現的指數在此列表中。 elem 要搜索的元素值。 from 開始索引 返回 該列表的第一個元素的索引> = from(等於==)確定爲elem,或者-1(如果不存在)。

+1

似乎'Iterable'特徵沒有這個方法 – MyTitle

+5

如果collection是一個Set,索引的含義是什麼?只有Seq具有已定義的元素順序。 – Eastsun

+1

@Eastsun,那是不正確的。 TreeSet有一個定義的迭代順序,它是一個Set而不是Seq。 Iterable上的多個方法僅適用於有序集合。保羅·菲利普斯和馬丁·奧德斯基對此次討論表示贊同,認爲設計存在缺陷:https://groups.google.com/d/msg/scala-debate/je4vZbR3WbA/_fa5aNyTyuoJ –