Использование операторов сравнения в системе сопоставления с образцом Scala

Обработать номера как ключи.

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

144
задан Ben James 24 November 2009 в 23:24
поделиться

2 ответа

Вы можете добавить защиту, то есть if и логическое выражение после шаблона:

a match {
    case 10 => println("ten")
    case x if x > 10 => println("greater than ten")
    case _ => println("less than ten")
}

Изменить: Обратите внимание, что это более чем внешне отличается от добавления если после => , потому что шаблон не будет соответствовать , если защита не верна.

283
ответ дан 23 November 2019 в 22:33
поделиться

В качестве неответа на суть вопроса, в котором спрашивалось, как включить предикаты в предложение соответствия, в этом случае предикат может быть исключен до совпадения :

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 , но нельзя сделать такое предположение без некоторого риска изменения реализации с внизу.

32
ответ дан 23 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: