2011-01-16 2 views
2

Я довольно новичок в scala, и я не могу решить эту (довольно) тривиальную проблему.Заполняющий список со значениями из цикла for в Scala

Я знаю, что могу создать экземпляр списка с заранее заданными значениями как это:

val myList = List(1,2) 

Я хочу, чтобы заполнить список всех целых чисел от 1 до 100000. Моя цель - не использовать var для списка и использовать цикл для заполнения списка.

Есть ли какой-нибудь «функциональный» способ сделать это?

ответ

10

Любой из них будет делать трюк. (Если вы попытаетесь их в РЕПЛ, однако, иметь в виду, что он будет пытаться напечатать все миллионов сотни тысяч записей, которые, как правило, не будет работать.)

List.range(1,100001) 
(1 to 100000).toList 
+0

Ничего себе, это легче, чем я думал. Благодаря! –

+1

'(от 1 до 100000)' генерирует числа "по запросу", 'toList' заставляет создавать в памяти все элементы. Другое мнение, которое могло бы заинтересовать вас в заполнении коллекций, - 'Seq # tabulate'. – shellholic

+0

@shellholic: Действительно. Если вам просто нужны номера от 1 до 1000000, вам, вероятно, не нужен список. Но ОП запросил список, поэтому 'toList' это. –

2

Я также очень новый Скала, это довольно здорово, не так ли.

У Рекса есть абсолютно правильный ответ, но как пища для размышлений: если вам нужен список, который не оценивается заранее (возможно, вычисления, связанные с оценкой предметов в списке, дороги или вы просто хотите сделать вещи ленивый), вы можете использовать Stream.

Stream.from(0,1).takeWhile(_<=100000) 

Это может использоваться в большинстве ситуаций, когда вы используете Список.

Смежные вопросы