Rebol COLLECT: keep source data order in a loop

There is some source data, for example [1 2 3 4 "a" "b" "c" "d"], four elements as a group. I want to extract some data in certain positions, such as the first, third and fourth from each group.

There is my code:

data: [1 2 3 4 "a" "b" "c" "d"]
output: copy []
foreach [p1 p2 p3 p4] data [ collect/into [keep p1 keep p3 keep p4] output ]
probe output    ;;the output is ["a" "c" "d" 1 3 4]

But I really want to [1 3 4 "a" "c" "d"]. How can I save an order?

+4
source share
2 answers

Rebol, /into, insert. , , , . /into insert, insert , append.

, collect:

data: [1 2 3 4 "a" "b" "c" "d"]
output: collect [
    foreach [p1 p2 p3 p4] data [ keep p1 keep p3 keep p4 ]
]
probe output

- , collect . , , /into:

data: [1 2 3 4 "a" "b" "c" "d"]
output: copy []
foreach [p1 p2 p3 p4] data [
    output: collect/into [keep p1 keep p3 keep p4] output
]
probe head output

/into , . collect, . :

data: [1 2 3 4 "a" "b" "c" "d"]
output: make block! 0.75 * length? data
foreach [p1 p2 p3 p4] data [
    output: collect/into [keep p1 keep p3 keep p4] output
]
probe head output

collect , ; . , , /into :

data: [1 2 3 4 "a" "b" "c" "d"]
output: make block! 0.75 * length? data
foreach [p1 p2 p3 p4] data [ output: reduce/into [p1 p3 p4] output ]
probe head output

, .

+3

collect insert , , append . , - , . repend :

data: [1 2 3 4 "a" "b" "c" "d"]
output: copy []
forskip data 4 [repend output [data/1 data/3 data/4]]
probe output    ;; [1 3 4 "a" "c" "d"]

, forskip foreach , .

+3

Source: https://habr.com/ru/post/1527192/


All Articles