Сравните ArrayBuffer [Array [String]] со Scala в режиме FP - PullRequest
0 голосов
/ 19 марта 2019

Мне нужно сравнить две коллекции типа ArrayBuffer[Array[String]], используя чисто функциональное программирование.

, например

ArrayBuffer(Array("str1"), Array("str2"), Array("str3"))
// compare with
ArrayBuffer(Array("str1"), Array("str2"), Array("str3"))

У меня есть решение для ArrayBuffer[String]:

  def sameAs[A](c: Traversable[A], d: Traversable[A]): Boolean =
    if (c.isEmpty) d.isEmpty
    else {
      val (e, f) = d span (c.head !=)
      if (f.isEmpty) false else sameAs(c.tail, e ++ f.tail)
    }

1 Ответ

0 голосов
/ 20 марта 2019

Если мы хотим проверить, одинаковы ли два прохождения значений в типе A, мы должны иметь порядок в типе данных A или функцию, чтобы проверить, являются ли два значения типа A одинаковыми.

Решение: сначала, имея какой-то способ проверить, одинаковы ли два массива (записав порядок или функцию), а затем, написать функцию, чтобы проверить, совпадают ли два обхода массива [T].

Следующая функция проверяет, совпадают ли два массива:

def isTheSameArray[T](xs: Array[T], ys: Array[T])(implicit ordering: Ordering[T]): Boolean = 
  xs.size == ys.size && xs.zip(ys).forall{ case (x, y) => x == y } 

Теперь мы можем написать функцию для проверки того, совпадают ли два буфера массива, как показано ниже:

def isTheSame[T](xs: Traversable[Array[T]], ys: Traversable[Array[T]])(implicit ordering: Ordering[T]): Boolean = 
  if (xs.size != ys.size) false 
  else if (xs.isEmpty == ys.isEmpty) true
  else isTheSameArray(xs.head, ys.head) && isTheSame(xs.tail, ys.tail) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...