2016-01-08 4 views
2

Есть ли способ в Scala сравнить две последовательности так, чтобы они возвращали true, если они содержат одни и те же элементы, независимо от порядка и повторений?Сравнение Scala Seq

Seq("1", "2") vs Seq("2", "1")   => true 
Seq("3", "1", "2") vs Seq("2", "1", "3") => true 
Seq("1", "1", "2") vs Seq("2", "1")  => true 

Благодаря

пс это не дублируется из this, потому что он также просит, чтобы исключить продублированы из проверки и использует SEQ вместо LIST.

+0

Возможного дубликат [Есть ли метод API, который сравнивает содержимое a Seq независимо от порядка?] (http://stackoverflow.com/questions/3622895/is-there-an-api-method-that-compares-contents-of-a-seq-irrespective-of-order) –

ответ

8

Преобразовать в наборах и сравнить их

+0

почему этот ответ был проголосован? кажется, что он работает нормально – abx78

+0

при преобразовании в установки Seq («1», «1», «2»). toSet будет равен Seq («1», «2»). toSet из-за того же элемента –

+2

@stanislav. Четвертьков, который в этом вопросе кажется желательным. – Suma

-1

Ввести объект расширения с оператором ===. Он будет использоваться неявно же набранного Seqs

implicit class SeqOps[A](it:Seq[A]){ 
    def === (that:Seq[A]) = it.toSet == that.toSet 
} 

import Test.SeqOps 

Seq("1", "2") === Seq("2", "1") shouldBe true 
+0

, который не подходит для последнего примера ... –

-3

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

val n1: Seq[Int] = Seq(1, 3, 4) 
    val n2: Seq[Int] = Seq(3, 4, 1) 

    if(n1.toSet.equals(n2.toSet)){ 
     println("The sequences have the same elements.") 
    } 
+1

'equals' в scala? –

+0

Scala использует == для проверки объектов структурного равенства –

+0

ссылка на разницу между == и equals (http://stackoverflow.com/questions/7681161/whats-the-difference-between-and-equals-in-scala) – farohetch13

0
@ def sameElements[A](a: Seq[A], b: Seq[A]) = a.toSet == b.toSet 
defined function sameElements 
@ sameElements(Seq("1", "2"),Seq("2", "1")) 
res2: Boolean = true 
@ sameElements(Seq("3", "1", "2"),Seq("2", "1", "3")) 
res3: Boolean = true 
@ sameElements(Seq("1", "1", "2"),Seq("2", "1")) 
res4: Boolean = true 

 Смежные вопросы

  • Нет связанных вопросов^_^