如何使用 zipWithIndex 创建函数 returns scala 中 List[Int] 中的 Int

How to create a function with zipWithIndex that returns an Int from a List[Int] in scala

我正在尝试使用 zipWithIndex 通过创建一个采用 List[Int][ 的方法函数来索引我列表中的第一个负值=26=] 并将 return 一个 Int 或一个选项 [Int] 供我使用。首先,我使用 zipWithIndex 创建了列表和函数,但我一直收到类型不匹配错误:

val list = List(-2,-1,2,3,4)

def getNegativeIndex(xs: List[Int]): Int = {
  
    for ((x, count) <- xs.zipWithIndex if x < 0) yield(count)
}

这是我不断收到的错误:

type mismatch;
 found   : List[Int] => Int
 required: Int

我的目标是索引列表的第一个负值 "list" 即我的结果应该是 getNegativeIndex(list) == 0 使用我提供的列表,因为第一个元素 -2 位于索引 0

请问,我需要在上述功能中添加或删除什么才能实现我的目标

为了 getNegativeIndex(list) 到 return 一个整数和您想要的值,您只需要 return 您的理解生成的列表的 headOption .

当前的for-comprehension相当于 xs.zipWithIndex.filter(_._1 < 0).map(_._2)。所以你可以这样做

xs.zipWithIndex.filter(_._1 < 0).map(_._2).headOption

或者像这样将 headOption 添加到您的理解中

(
  for ((x, count) <- xs.zipWithIndex if x < 0) yield(count)
).headOption

结果将是相同的,即函数 return 是列表中负数的第一个索引,或者 None 如果所有都是非负数。您可以改为使用 .head 直接获取整数,但请注意,如果列表不包含任何负数或为空,它将引发异常。