Rebolでは、任意の構造化データを表すためにブロックを使用することが期待されています。ブロックをリスト以外のデータ構造として扱う組み込み式または標準的な方法がありますか?ブロックはRebolのさまざまなデータ構造として
私はと考えています:
- スタック
- (おそらくダブルエンド)のキュー
- 別名マッピングし
- セット。連想配列
Rebolでは、任意の構造化データを表すためにブロックを使用することが期待されています。ブロックをリスト以外のデータ構造として扱う組み込み式または標準的な方法がありますか?ブロックはRebolのさまざまなデータ構造として
私はと考えています:
Rebolには、すべて同じ方法で扱うことができる任意のデータの3つの保持者があります。
あなたは
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にはキー値のペア、ハッシュの意味はありません。内部的にハッシュを構築する順序付けされた値のリストです。参照のための値。そのためだけにも洗練あなたはまた、オブジェクトを使用することができます連想配列の場合
>> select/skip x 33 2
== none
スキップ、実際にキーと値のペアのためにそれを使用するには
>> select x 33
== key
上の値33を、以下のものを尋ねる使用することができます!動的なフィールドを持つ必要がない場合に備えます。
連想構造の場合、特定のキーに値を挿入する関数は何ですか? – dukereg
@dukereg私の更新を参照してください – joing
スタックの組み込み関数を使用してブロックの同じ端から挿入して削除する方法は私には分かりません。 – dukereg