2015-11-07 5 views
0

Я пытаюсь использовать рекурсивную функцию для прохождения каждого элемента в списке [Char], чтобы проверить количество вхождений элемента. Я знаю, что есть более простые способы и, возможно, даже функции для этого, но есть ли способ удалить только первую позицию списка?Удалить первый элемент списка в Scala

я попытался с помощью капли, и даже использовали следующие отсекать, но он не сделал ничего, где тест является именем списка:

def delete(i: Int) = test.take(i) ++ test.drop((i+1)); 

Я пытаюсь избегать использования ListBuffer, и попытался преобразования в массив, но опять же без успеха.

+0

Рассмотрите это по-разному. Вам нужен весь список, кроме 'head'. Для этого существует функция 'tail'. – Rumoku

+1

'tail' не следует использовать, поскольку это частичная функция, т. Е. Он будет генерировать исключение для пустого списка am. 'Многие функции, такие как head, tail, init и многие другие, терпят неудачу. '-Http: //stackoverflow.com/a/23184020/409976 –

+1

' любой способ удалить только первую позицию списка ? '. 'List # drop (1)' отвечает на этот вопрос. Почему он не работает для вас? –

ответ

1

Ваша функция почти отлично пункт удаления в я-й позиции, я бы просто добавить список «тест» в качестве параметра к нему:

scala> def delete[A](test:List[A])(i: Int) = test.take(i) ++ test.drop((i+1)) 
delete: [A](test: List[A])(i: Int)List[A] 

scala> delete((1 to 10).toList)(3) 
res0: List[Int] = List(1, 2, 3, 5, 6, 7, 8, 9, 10) 

Я думаю, что вы пытаетесь сделать какой-то эффект на «тест» с использованием функция delete, но List неизменен, функция delete не будет производить побочный эффект, она просто возвращает новый список

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