很不幸,我收到的索引为-1,而我希望收到的索引为2 有没有解决这个问题的替代方案吗?
val a = Array((1,2),(1,3),(2,1),(4,3));
a.indexOf(Tuple2[Int,Int](2,_))
答案 0 :(得分:3)
没有所谓的“隐式元素”。 Tuple2[Int, Int](2, _)
是部分应用的对构造函数。您的列表不包含任何构造函数,因此您会得到一个-1
。
如果要查找以2
作为第一个元素的元组的第一个匹配项的索引,可以尝试执行以下操作:
a.indexWhere(_._1 == 2)
或者(如果您不记得有indexWhere
,例如我和迪玛):
a.view.zipWithIndex.find{ case ((2, _), idx) => true ; case _ => false }.map(_._2)
或
a.view.zipWithIndex.collect{ case ((2, _), idx) => idx }.headOption
答案 1 :(得分:1)
是的,这是行不通的(我什至不知道您如何设法从中得到-1,它根本不应该编译)。 indexOf
在数组元素上寻找完全匹配的内容,您不能给它通配符。
这样的事情会做你想要的:
a.iterator
.zipWithIndex
.collectFirst { case ((2, _), idx) => idx }
.getOrElse(-1)
或者,使用indices
,但这仅适用于数组:
a.indices.find(a(i)._1 == 2).getOrElse(-1)
答案 2 :(得分:1)
您可以使用indexWhere
查找与函数谓词匹配的元素索引,并使用PartialFunction.cond
将模式转换为这样的谓词:
scala> a.indexWhere(PartialFunction.cond(_) { case (2, _) => true })
res1: Int = 2