Чтобы проверить, соответствует ли мой список параметрам, изложенным во вложенном цикле в функции scala - PullRequest
0 голосов
/ 13 февраля 2019
def sorted[A] (as: Array[A], p:(A,A,A)=Boolean): Boolean => {
def alpha(n: Array[String]): Boolean => {
    if (n()>=as()) true
    else if (!(p)as(n-1), as(n)) false
    else loop(n+1)

}
=alpha()

Вопрос состоит в том, чтобы сделать функцию, проверяющую, отсортированы ли входные данные, и возвращает true, если строки отсортированы в порядке возрастания, т. Е. (Отсортировано от A до Z), но в противном случае - false.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать сопоставление с образцом, чтобы определить, с каким типом Array вы имеете дело.

def arrTest[A](a :Array[A]) :Boolean = a match {
  case sa :Array[String] =>
    sa.length < 2 || sa.sliding(2).forall(x => x(0) < x(1))
  case ia :Array[Int] =>
    ia.length > 2 &&
      ia(0) == 1 && ia(1) == 1 &&
      ia.sliding(3).forall(x => x(0) + x(1) == x(2))
  case _ => a.length == 3
}

использование:

arrTest(Array("John","Margaery"))          //true  (Strings in order)
arrTest(Array("John", "Basquiat", "Yoda")) //false (Strings out of order)
arrTest(Array(1,1,2,3,5,8,13))             //true  (Fibonacci Ints)
arrTest(Array('z', 'k', 'b'))              //true  (3 Chars, any order)
arrTest(Array(3.1, 4.4))                   //false (2 Doubles)
...