.Reverse невозможно использовать внутри карты {case => if} Палиндром со вторым элементом - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в scala, и я не уверен, почему это не работает

def Palindrome[T](list: List[T]): Boolean = {

  list.zipWithIndex.map{case (num, i) => if(i%2 == 1) num == num.reverse}
  println(list)
}

Я пытаюсь сделать проверку палиндрома на основе каждого второго элемента списка. Насколько мне известно, это должно работать IE List(1,10,2,5,2,10) 10,5,10 это палиндром

1 Ответ

2 голосов
/ 25 марта 2020

Вы должны сделать это в два шага:

  • фильтровать каждый второй элемент
  • проверить, является ли отфильтрованная коллекция палиндромом

https://scalafiddle.io/sf/IdZ2s5t/2

def dropEvenIndexes[T](list:List[T]) = {
  list.zipWithIndex
    .collect {case (it, idx) if idx % 2 ==1 => it }
}

def isPalindrome[T](list: List[T]): Boolean = list == list.reverse

def palindromeOddIndexes[T](l:List[T]) = isPalindrome(dropEvenIndexes(l))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...