Яка різниця між :: та ::: у Scala


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

тоді

list1::list2 returns:

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

list1:::list2 returns:

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

Я бачив, як книга пише, що при використанні ::це також призводить до результатів List[Int] = List(1, 2, 3, 4). Моя версія Scala - 2.9.

Відповіді:


119

::додає окремий елемент, тоді як :::додає повний список. Отже, якщо ви ставите Listперед ::ним, це приймається як один елемент, що призводить до вкладеної структури.


З причини ефективності, чи є різниця між ::і :::?
нуль

2
Продуктивність повинна бути O(n)з nбути числом елементів в препенд.
Debilski

Виправте мене, якщо я помиляюся, але хіба ця операція не є додатком, а не додаванням?
Janac Meena

1
приклад полегшить розуміння
techkuz,

20

Загалом:

  • :: - додає елемент на початку списку і повертає список із доданим елементом
  • ::: - об'єднує два списки та повертає об'єднаний список

Наприклад:

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

У вашому конкретному запитанні використання ::призведе до списку у списку ( вкладеного списку ), тому я вважаю, що ви віддаєте перевагу використанню :::.

Довідково: Список класів на офіційному сайті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.