Как создать функцию с zipWithIndex, которая возвращает Int из List [Int] в scala - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь использовать zipWithIndex для индексации первого отрицательного значения в моем списке, создавая функцию метода, которая принимает List [Int] и возвращает 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

Моя цель - проиндексировать первое отрицательное значение списка "список" т.е. мой результат должен быть getNegativeIndex (list) == 0 с использованием списка, который я предоставил, поскольку 1-й элемент -2 находится в индексе 0

пожалуйста, что мне нужно добавить к вышеуказанной функции или удалить для достижения моей цели

1 Ответ

0 голосов
/ 21 июня 2020

Для того, чтобы getNegativeIndex(list) возвращал единственное целое число и желаемое значение, вам нужно вернуть только headOption списка, который генерирует ваше понимание.

Текущее значение для понимания эквивалентно на 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

Результат будет таким же, т.е. функция возвращает первый индекс отрицательное число в списке или None, если все неотрицательные. Вместо этого вы можете использовать .head, чтобы получить целое число напрямую, но имейте в виду, что это вызовет исключение, если список не содержит отрицательных чисел или пуст.

...