2016-01-25 2 views
-1

Я пытаюсь помочь рекурсивному методу в scala, который удаляет определенное число из списка и возвращает этот список без указанного номера. Я могу использовать только инструкции if/else и спаривание (: :)Как создать рекурсивный метод scala

Пока у меня это есть, но я не уверен, как удалить элементы из списка в scala.

def removeNum(lst: List[Int]): lst2:List[Int] = lst match { 
var lst2:Int 
case Nil =>0 
case h::t=>{ 
    if(h !=0) 
     lst2(h)// how do I iterate thru the list without using foreach?  
    } 
else { 
    removeNum(rest) 
    } 
} 

Я ищу лучший подход к этому методу.

+1

Лучший подход заключается в использовании 'метод filter' стандартная библиотека по спискам:' lst.filter (х => х = numberToRemove!) ' – Eduardo

+0

Я не могу использовать библиотеку. Я не ищу весь код, просто способ выполнить эту задачу по удалению числа, используя только вспомогательные методы, шаблоны и if/else –

+1

Каким параметром является «заданный номер», который вы пытаетесь удалить? –

ответ

4

Основной подход - сравнить «заданный номер» с заголовком списка. Если есть совпадение, верните рекурсивный результат только в остальную часть списка. В противном случае верните список, созданный путем сохранения заголовка списка и повторения в остальной части списка. Обратите внимание, что легче подумать, стоит ли сохранить, а не думать о удалить элементов из списка.

Обратите внимание, что для этого требуется второй параметр: «заданный номер», который вы хотите удалить.

-3

В то время как я думаю, вы должны использовать фильтр, вы можете использовать:

def removeNum(xs: List[Int], toRemove: Int): List[Int] = xs match { 
    case x :: xss => if (x == toRemove) 
    removeNum(xss, toRemove) 
    else 
    x :: removeNum(xss, toRemove) 
    case List() => List() 
} 
+1

ОП запросил явно не давать весь код. Кроме того, ваша версия имеет тонкую ошибку, которая не даст правильного результата в некоторых случаях. –

+0

@ Code-Apprentice: хотя этот ответ портит опыт обучения, я не вижу явного запроса не отдать код. – Eduardo

+0

@Eduardo http://stackoverflow.com/questions/34998711/how-to-create-scala-recursive-method/34998869?noredirect=1#comment57725555_34998711 –

Смежные вопросы