Sự khác biệt giữa :: và ::: trong Scala


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

sau đó

list1::list2 returns:

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

list1:::list2 returns:

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

Tôi thấy cuốn sách viết rằng khi sử dụng ::nó cũng có kết quả List[Int] = List(1, 2, 3, 4). Phiên bản Scala của tôi là 2.9.

Câu trả lời:


115

::thêm trước một mục trong khi :::thêm trước một danh sách hoàn chỉnh. Vì vậy, nếu bạn đặt một Listtrước ::nó sẽ được coi là một mục, dẫn đến một cấu trúc lồng nhau.


Vì lý do hiệu suất, có sự khác biệt giữa :::::?
null

2
Hiệu suất nên O(n)nlà số nguyên tố để thêm vào trước.
Debilski

Hãy sửa tôi nếu tôi sai, nhưng thao tác này không phải là một phần thêm chứ không phải là một phần trước?
Janac Meena

một ví dụ sẽ làm cho nó dễ dàng hơn để hiểu
techkuz

18

Nói chung:

  • :: - thêm một phần tử vào đầu danh sách và trả về một danh sách với phần tử đã thêm
  • ::: - nối hai danh sách và trả về danh sách đã nối

Ví dụ:

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

Trong câu hỏi cụ thể của bạn, việc sử dụng ::sẽ dẫn đến danh sách trong một danh sách ( danh sách lồng nhau ) vì vậy tôi tin rằng bạn thích sử dụng hơn :::.

Tham khảo: Danh sách lớp trong trang web chính thức

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.