2015-02-16 7 views
2

Что такое аккуратный однострочный шрифт для заполнения массива (данного возможно динамического размера) с его собственными индексами?Эффективный способ заполнить массив своими собственными индексами в Rebol3

Я пытался это:

data: copy {} 
repeat tilenum totaltiles [ append data rejoin [tilenum " "] ] 

... а потом смотрит, чтобы преобразовать его в массив, но должно быть более Rebolish способ сделать такую ​​вещь, я думаю.

Моя конечная цель состоит в том, чтобы затем рандомизировать порядок содержимого массива, который, я думаю, будет выводить random myarrayhere, но, возможно, есть даже способ сделать все это одним махом?

ответ

3

Если вам нужен случайный массив (block!), почему бы не начать с блока вместо строки в первую очередь?

>> random array/initial length: 10 does [-- length] 
== [3 10 7 9 2 5 8 6 1 4] 
+0

Начиная с блоком именно то, что я искал, за исключением I не понимал, что вы можете использовать 'does' в качестве аргумента для' array/initial', что теперь делает полный смысл, когда я его вижу. – Kev

2

Вот еще один вариант, чтобы показать вам еще несколько трюков Rebol. collect и keep очень круты в этой настройке.

random collect [ repeat tilenum 10 [ keep tilenum ] ] 

Я обновил свой первый ответ на использование repeat как предложено @rebolek как я согласен, что синтаксис for является менее совершенным.

Если вы хотите действительно случайные числа, и не возражаете риск повторного числа есть более сжатый вариант с использованием loop конструкции

collect [ loop 10 [ keep random 100 ] ] 
+1

COLLECT/KEEP - хороший трюк, и вы можете использовать 'repeat tilenum 10 [...]' - Мне действительно не нравится FOR :) – rebolek

+0

Супер, мне нравится этот синтаксис, но accept переходит на @rebolek исключительно для того, чтобы быть первым , – Kev