2013-02-25 4 views
0

создать список, как это:Confused о добавлении в список

var multiList : List[MyObj] = Nil 

Для добавления объектов в этот список я использую:

multiList = multiList ::: List(MyObj) 

это работает, но я не должен использовать

multiList = multiList ::: MyObj 

как здесь Я добавляю объект в список, если в примере (который работает) он выглядит синтаксически, как если бы я добавлял новый список в список ?

ответ

3

Операторы ::: означают, что конкатенация, а не добавление. Для элемента-append есть :+.

+0

Я хочу подчеркнуть, что ': +' как сложность O (n) в случае списков (необходимо просмотреть весь список, чтобы добавить к нему), поэтому вы должны переключиться на другую структуру данных, если вам нужно часто добавлять. См. [Характеристики производительности коллекций Scala] (http://www.scala-lang.org/docu/files/collections-api/collections_40.html) – Xion345

1

Метод :: используется для добавления материала в список. Оператор ::: используется для добавления одного списка в другой. :: заканчивается двоеточием и, таким образом, является «правильным ассоциативным», который можно объяснить следующим образом

х :: у

// будет переведен на

y.::(x)

Таким образом, чтобы добавить свой объект в пустой список вы могли бы сделать

MyObj :: Nil

// будет переведен на

Nil.::(MyObj)

Если вы хотите добавить список объектов для пустого списка вы могли бы сделать

Список (MyObj, MyObj) ::: Nil

// будет переведен на

Nil.:::(List(MyObj, MyObj))

Если вы хотите добавить, вы можете использовать метод :+. Это, однако, действует по-разному для разных типов коллекций. Более подробную информацию о производительности можно найти здесь: Performance Characteristics