Jaka jest różnica między :: i ::: w Scali

83
val list1 = List(1,2)
val list2 = List(3,4)

następnie

list1::list2 returns:

List[Any] = List(List(1, 2), 3, 4)

list1:::list2 returns:

List[Int] = List(1, 2, 3, 4)

Widziałem, jak w książce pisze, że przy ::jej użyciu również skutkuje List[Int] = List(1, 2, 3, 4). Moja wersja Scala to 2.9.

Hesey
źródło

Odpowiedzi:

118

::dołącza pojedynczą pozycję, :::a całą listę poprzedza. Tak więc, jeśli umieścisz Listprzed ::nim znak , zostanie on potraktowany jako jeden element, co spowoduje utworzenie zagnieżdżonej struktury.

Dębilski
źródło
Czy ze względu na wydajność jest różnica między ::i :::?
null
2
Wydajność powinna być O(n)przy nczym liczba elementów dołączana.
Dębilski
Popraw mnie, jeśli się mylę, ale czy ta operacja nie jest raczej dołączaniem niż przedrostkiem?
Janac Meena
1
przykład znacznie ułatwiłoby zrozumienie
techkuz
20

Ogólnie:

  • :: - dodaje element na początku listy i zwraca listę z dodanym elementem
  • ::: - łączy dwie listy i zwraca listę połączoną

Na przykład:

1 :: List(2, 3)             will return     List(1, 2, 3)
List(1, 2) ::: List(3, 4)   will return     List(1, 2, 3, 4)

W twoim konkretnym pytaniu użycie ::spowoduje wyświetlenie listy na liście ( lista zagnieżdżona ), więc uważam, że wolisz użyć :::.

Odniesienie: lista klas na oficjalnej stronie

RefaelJan
źródło