gpt4 book ai didi

Rebol 收集 : keep the order of the source data in a loop

转载 作者:行者123 更新时间:2023-12-04 23:51:13 26 4
gpt4 key购买 nike

有一些源数据,比如 [1 2 3 4 "a" "b" "c" "d"] ,四项为一组。我想在特定位置提取一些数据,例如每个组的第一、第三和第四。

有我的代码:

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]

但我真正想要的是 [1 3 4 "a" "c" "d"] .我怎样才能保持订单?

最佳答案

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

那里没有使用非本地函数,这应该很快。

关于Rebol 收集 : keep the order of the source data in a loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21812601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com