0

我收集到,在 Rebol 中,预计将使用一个块来表示任意结构化数据。是否存在将块视为列表以外的数据结构的内置或标准方法?

我在想:

  • 堆栈
  • 队列(可能是双端的)
  • 地图又名。关联数组
4

1 回答 1

3

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没有键值对的感觉,散列!只是内部将构建散列的有序值列表!参考值。因此,您也可以问上面的值 33 后面是什么

>> select x 33
== key

要真正将其用于键值对,请使用跳过细化

>> select/skip x 33 2
== none

对于关联数组,您也可以使用 object!如果它不需要动态字段。

于 2017-11-26T09:18:20.557 回答