Обработать номера как ключи.
for each elem in array:
if hash(elem) == 1 //duplicate
ignore it
next
else
hash(elem) = 1
add this to resulting array
end
Если вы знаете о таких данных, как диапазон чисел, и если он конечен, вы можете инициализировать этот большой массив с помощью ZERO. array flag[N] //N is the max number in the array
for each elem in input array:
if flag[elem - 1] == 0
flag[elem - 1] = 1
add it to resulatant array
else
discard it //duplicate
end
Вы можете добавить защиту, то есть if
и логическое выражение после шаблона:
a match {
case 10 => println("ten")
case x if x > 10 => println("greater than ten")
case _ => println("less than ten")
}
Изменить: Обратите внимание, что это более чем внешне отличается от добавления если
после =>
, потому что шаблон не будет соответствовать , если защита не верна.
В качестве неответа на суть вопроса, в котором спрашивалось, как включить предикаты в предложение соответствия, в этом случае предикат может быть исключен до совпадения
:
def assess(n: Int) {
println(
n compare 10 match {
case 0 => "ten"
case 1 => "greater than ten"
case -1 => "less than ten"
})
}
Теперь документация для scala.math.Ordering.compare (T, T)
обещает только то, что неравные результаты будут на больше, чем или ] меньше нуля . Java Comparable # compareTo (T)
определяется аналогично Scala. Обычно принято использовать 1 и -1 для положительных и отрицательных значений соответственно, как это делает текущая реализация Scala , но нельзя сделать такое предположение без некоторого риска изменения реализации с внизу.