I wanted to use integers as keys, so I wrote this up.

[
Rebol [
    Title: "Associate"
    Name: 'Associate
    File: %Associate.r
    Author: "Andrew Martin"
    Email: [EMAIL PROTECTED]
    Date: 15/September/2000
    ]

Encapsulate: function [Value] [Block] [
    Block: make block! 1 insert/only Block Value Block
    ]

Associate: function [Block [block!] Key Value] [Index] [
    either found? Index: find Block Key [
        change/only next Index Encapsulate Value
        ][
        append Block reduce [Key Encapsulate Value]
        ]
    Block
    ]

Deassociate: function [Block [block!] Key] [Index] [
    if found? Index: find Block Key [
        remove/part Index 2
        ]
    Block
    ]

Associated?: function [Block [block!] Key] [Value] [
    Value: select Block Key
    either none? Value [none] [first Value]
    ]

]

>> do %Associate.r
>> block: []
== []
>> Associate block 1 "The test is this"
== [1 ["The test is this"]]
>> Associate block 2 [1 2 3]
== [1 ["The test is this"] 2 [[1 2 3]]]
>> associated? block 1
== "The test is this"
>> associated? block 2
== [1 2 3]
>> block/2
== ["The test is this"]
>> deassociate block 2
== [1 ["The test is this"]]
>> deassociate block 1
== []

I don't like 'Encapsulate. Any one know of a better way to do it?

Andrew Martin
ICQ: 26227169
http://members.ncbi.com/AndrewMartin/
http://members.xoom.com/AndrewMartin/
-><-

[
Rebol [
	Title: "Associate"
	Name: 'Associate
	File: %Associate.r
	Author: "Andrew Martin"
	Email: [EMAIL PROTECTED]
	Date: 15/September/2000
	]

Encapsulate: function [Value] [Block] [
	Block: make block! 1 insert/only Block Value Block
	]

Associate: function [Block [block!] Key Value] [Index] [
	either found? Index: find Block Key [
		change/only next Index Encapsulate Value
		][
		append Block reduce [Key Encapsulate Value]
		]
	Block
	]

Deassociate: function [Block [block!] Key] [Index] [
	if found? Index: find Block Key [
		remove/part Index 2
		]
	Block
	]

Associated?: function [Block [block!] Key] [Value] [
	Value: select Block Key
	either none? Value [none] [first Value]
	]

]

Reply via email to