例如:
import scala.collection.mutable.ArrayBuffer
val times = ArrayBuffer(Some("Last week"), Some("Last month"), Some("Last year"))
如何在此数组缓冲区中找到去年/上个月/ ...的索引?
答案 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)
您可以使用indexOf
或lastIndexOf
。例如:
times indexOf ( Some( "Last year" ) )
您也可以使用indexWhere
或lastIndexWhere
。例如:
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)