Я уверен, что есть лучший способ.
list.tail.foldLeft(List[Int](list.head))((prev, next) => {
if (prev.last != next) prev +: next
else prev
})
foldLeft
принимает параметр (в первом приложении) и переходит от слева направо по вашему списку, применяя prev
и next
к двум параметрам, которые она задана, где prev
является результатом функции до сих пор, а next
является следующим элементом в вашем списке.
list.zipWithIndex.filter(l => (l._2 == 0) || (l._1 != list(l._2-1))).map(_._1)
В общем случае list.zip(otherList)
возвращает список кортежей соответствующих элементов. Например, List(1,2,3).zip(List(4,5,6))
приведет к List((1,4), (2,5), (3,6))
. zipWithIndex
- это конкретная функция, которая связывает каждый элемент списка с его индексом, в результате получается список, в котором каждый элемент имеет форму (original_list_element, index)
.
list.filter(function_returning_boolean)
возвращает список только с возвращенными элементами true
для function_returning_boolean
. Функция, которую я дал, просто проверяет, равен ли этот элемент предыдущему в исходном списке (или индекс равен 0).
Последняя часть, .map(_._1)
просто удаляет индексы.
this
не является селектором CSS.
вы можете избежать написания идентификатора this
, передав его в качестве контекста:
$('option:selected', this).remove();
$('#some_select_box').click(function() {
$(this).find('option:selected').remove();
});
Использование метода find .
Это должно помочь:
$('#some_select_box').click(function() {
$('option:selected', this ).remove();
});