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.

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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.