Rebol 中作为各种数据结构的块
Blocks as various data structures in Rebol
我了解到,在 Rebol 中,人们期望使用块来表示任意结构化数据。是否有内置或标准方法将块视为列表以外的数据结构?
我在想:
- 堆叠
- 队列(可能是双端的)
- 套
- 地图又名。关联数组
Rebol 拥有三个任意数据的持有者,所有数据都可以以相同的方式处理。
- 挡住!实现为数组,用于快速索引(整数)引用
- 名单!实现为链表,用于快速插入和删除数据
- 哈希!实现为哈希引用列表,用于快速查找数据和密钥
你对它们的操作方式与
相同
insert append index? find poke select ...
但它们的结果略有不同,尤其是响应时间。
在你的情况下使用
- 挡住!对于堆栈
- 名单!对于队列(我认为)
- 哈希!对于关联数组
如前所述,所有操作都相似(即使是散列!也可以通过索引引用)。因此,您可以将它们中的任何一个视为关联数组。
>> x: [a one b two c 33]
== [a one b two c 33]
>> x/a
== one
>> x/c
== 33
>> select x 'b
== two
>> pick x 4
== two
这将导致哈希完全相同!定义为 x: hash! [a 1 b 2 33]
。所以要添加一个新的键值对:
>> x: make hash! [ a 1 b 2 c 33]
== make hash! [a 1 b 2 c 33]
>> append x [ key value ]
== make hash! [a 1 b 2 c 33 key value]
>> x/key
== value
>> select x 'key
== value
>> pick x 8
== value
注意rebol没有键值对的意义,hash!只是内部将构建哈希的有序值列表!参考价值。因此,您也可以问上面的值 33 后面是什么
>> select x 33
== key
要真正将其用于键值对,请使用跳过优化
>> select/skip x 33 2
== none
对于关联数组你也可以使用object!如果它不需要动态字段。
我了解到,在 Rebol 中,人们期望使用块来表示任意结构化数据。是否有内置或标准方法将块视为列表以外的数据结构?
我在想:
- 堆叠
- 队列(可能是双端的)
- 套
- 地图又名。关联数组
Rebol 拥有三个任意数据的持有者,所有数据都可以以相同的方式处理。
- 挡住!实现为数组,用于快速索引(整数)引用
- 名单!实现为链表,用于快速插入和删除数据
- 哈希!实现为哈希引用列表,用于快速查找数据和密钥
你对它们的操作方式与
相同insert append index? find poke select ...
但它们的结果略有不同,尤其是响应时间。
在你的情况下使用
- 挡住!对于堆栈
- 名单!对于队列(我认为)
- 哈希!对于关联数组
如前所述,所有操作都相似(即使是散列!也可以通过索引引用)。因此,您可以将它们中的任何一个视为关联数组。
>> x: [a one b two c 33]
== [a one b two c 33]
>> x/a
== one
>> x/c
== 33
>> select x 'b
== two
>> pick x 4
== two
这将导致哈希完全相同!定义为 x: hash! [a 1 b 2 33]
。所以要添加一个新的键值对:
>> x: make hash! [ a 1 b 2 c 33]
== make hash! [a 1 b 2 c 33]
>> append x [ key value ]
== make hash! [a 1 b 2 c 33 key value]
>> x/key
== value
>> select x 'key
== value
>> pick x 8
== value
注意rebol没有键值对的意义,hash!只是内部将构建哈希的有序值列表!参考价值。因此,您也可以问上面的值 33 后面是什么
>> select x 33
== key
要真正将其用于键值对,请使用跳过优化
>> select/skip x 33 2
== none
对于关联数组你也可以使用object!如果它不需要动态字段。