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!如果它不需要动态字段。