如何使用scala在ArrayBuffer中查找索引

时间:2015-09-23 09:57:44

标签: scala

例如:

import scala.collection.mutable.ArrayBuffer
val times = ArrayBuffer(Some("Last week"), Some("Last month"), Some("Last year"))

如何在此数组缓冲区中找到去年/上个月/ ...的索引?

3 个答案:

答案 0 :(得分:3)

您可以使用indexOf

times.indexOf(Some("Last month")) // returns 1

更新

您可以通过

将时间ArrayBuffer[Option[String]]转换为ArrayBuffer[String]
val l = times.map(_.getOrElse("")) // ArrayBuffer("Last week", "Last month", ...)

然后你可以搜索字符串

l.indexOf("Last month")

答案 1 :(得分:1)

您可以使用indexOflastIndexOf。例如:

 times indexOf ( Some( "Last year" ) ) 

您也可以使用indexWherelastIndexWhere。例如:

times indexWhere { _.get == "Last year" }

答案 2 :(得分:0)

或许效率不如indexOf,但更具可读性,我认为:

scala> times.zipWithIndex.find( 
      { case (value, _) => value == Some("Last week") } 
).map(_._2)
res7: Option[Int] = Some(0)

或者,使用flatMap

scala> times.zipWithIndex.flatMap { 
     |    case (value, index) => value match { 
     |                   case Some("Last week") => ArrayBuffer(index)
     |                   case _                 => Nil 
     |                 }
     | }
res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0)