[REBOL] Associative Arrays in Rebol? Re:(2)

2000-03-10 Thread bpaddock

In article [EMAIL PROTECTED], you wrote:
I think select and paths should come close to what you're asking:

 select [ a "this is a" b "this is b" ] 'a
== "this is a"

I'll have to ponder that for a while but my first thought
is that doing it that way would make it difficult to
populate it from a data file of arbitrary data.

Here is a snipit from the Awk doc's that explains what I'm
after.


http://www.gnu.org/manual/gawk-3.0.3/html_chapter/gawk_12.html

Arrays in awk superficially resemble arrays in other
programming languages; but there are fundamental
differences. In awk, you don't need to specify the size of
an array before you start to use it. Additionally, any
number or string in awk may be used as an array index, not
just consecutive integers.

In most other languages, you have to declare an array and
specify how many elements or components it contains. In such
languages, the declaration causes a contiguous block of
memory to be allocated for that many elements. An index in
the array usually must be a positive integer; for example,
the index zero specifies the first element in the array,
which is actually stored at the beginning of the block of
memory. Index one specifies the second element, which is
stored in memory right after the first element, and so on.
It is impossible to add more elements to the array, because
it has room for only as many elements as you declared. (Some
languages allow arbitrary starting and ending indices, e.g.,
`15 .. 27', but the size of the array is still fixed when
the array is declared.)

A contiguous array of four elements might look like this,
conceptually, if the element values are eight, "foo", "" and
30:

Only the values are stored; the indices are implicit from
the order of the values. Eight is the value at index zero,
because eight appears in the position with zero elements
before it.

Arrays in awk are different: they are associative. This
means that each array is a collection of pairs: an index,
and its corresponding array element value:

Element 4 Value 30
Element 2 Value "foo"
Element 1 Value 8
Element 3 Value ""

We have shown the pairs in jumbled order because their order
is irrelevant.

One advantage of associative arrays is that new pairs can be
added at any time. For example, suppose we add to the above
array a tenth element whose value is "number ten". The
result is this...



[REBOL] Associative Arrays in Rebol? Re:(3)

2000-03-10 Thread allenk


Attached is a script for collection object,  I wrote it to get similar
functionality to the collection  dictionary objects in vb and vbscript.
(With a bit of modifiction it may suit your associative array needs).

Cheers,

Allen K

col make collection []
 col/set-item "Apple" "Red"
 col/set-item "App" "Office"
 col/get-item "App"
== "Office"
 col/get-item "Apple"
== "Red"
 col/get-item 1
== "Red"
 col/get-item 2
== "Office"



- Original Message -
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Friday, March 10, 2000 10:05 PM
Subject: [REBOL] Associative Arrays in Rebol? Re:(2)


 In article [EMAIL PROTECTED], you wrote:
 I think select and paths should come close to what you're asking:

  select [ a "this is a" b "this is b" ] 'a
 == "this is a"

 I'll have to ponder that for a while but my first thought
 is that doing it that way would make it difficult to
 populate it from a data file of arbitrary data.

 Here is a snipit from the Awk doc's that explains what I'm
 after.

 
 http://www.gnu.org/manual/gawk-3.0.3/html_chapter/gawk_12.html

 Arrays in awk superficially resemble arrays in other
 programming languages; but there are fundamental
 differences. In awk, you don't need to specify the size of
 an array before you start to use it. Additionally, any
 number or string in awk may be used as an array index, not
 just consecutive integers.

 In most other languages, you have to declare an array and
 specify how many elements or components it contains. In such
 languages, the declaration causes a contiguous block of
 memory to be allocated for that many elements. An index in
 the array usually must be a positive integer; for example,
 the index zero specifies the first element in the array,
 which is actually stored at the beginning of the block of
 memory. Index one specifies the second element, which is
 stored in memory right after the first element, and so on.
 It is impossible to add more elements to the array, because
 it has room for only as many elements as you declared. (Some
 languages allow arbitrary starting and ending indices, e.g.,
 `15 .. 27', but the size of the array is still fixed when
 the array is declared.)

 A contiguous array of four elements might look like this,
 conceptually, if the element values are eight, "foo", "" and
 30:

 Only the values are stored; the indices are implicit from
 the order of the values. Eight is the value at index zero,
 because eight appears in the position with zero elements
 before it.

 Arrays in awk are different: they are associative. This
 means that each array is a collection of pairs: an index,
 and its corresponding array element value:

 Element 4 Value 30
 Element 2 Value "foo"
 Element 1 Value 8
 Element 3 Value ""

 We have shown the pairs in jumbled order because their order
 is irrelevant.

 One advantage of associative arrays is that new pairs can be
 added at any time. For example, suppose we add to the above
 array a tenth element whose value is "number ten". The
 result is this...




REBOL [
Title: "Collection Object"
Author: "Allen Kamp"
Date: 11-Sep-1999
Email: [EMAIL PROTECTED] 
Purpose: {To provide an object similar to the VB collection object.}
Notes: {I should hide the values and attributes lists (or make read only).
And add a method to return a paired block, for iteration,
also add a clone method}
Usage: {
   col: make collection []
   col/set-item "Apple" "Green"
   col/set-item "Orange" "Orange"
   col/set-item "Grapes" "Purple"
   col/count
 == 3
   col/get-item "Apple"
 == "Green"
   col/set-item "Apple" "Red"
   col/get-item "Apple"
 == "Red"
   col/exists "Apple" ;--Return the index or else false
 == 1 
   col/get-item 1
 == "Red"
   col/remove-item "Apple"
   col/get-item "Apple"
 == none
  ;-- if you want to add to the beginning of the list
 col/set-item/pos "Apple" "Granny Smith" 1
  ;-- to return the list of attributes or values
 col/attributes
 col/values
 
}
]   

collection: make object! [

values: make block! [] 30
attributes: make hash! [] 30


;---count

count: func [][length? attributes]

;---exists

exists: func [
attrib

[REBOL] Associative Arrays in Rebol? Re:

2000-03-09 Thread icimjs

I think select and paths should come close to what you're asking:

for instance:

 select [ a "this is a" b "this is b" ] 'a
== "this is a"
 select [ a "this is a" b "this is b" ] 'b
== "this is b"
 block: [ a "this is a" b "this is b" ]
== [a "this is a" b "this is b"]
 block/a
== "this is a"
 block/b
== "this is b"

At 09:06 PM 3/9/00 -0500, you wrote:
Is there any way to simulate Associative Arrays in Rebol?

The type where the index could be a list of random words
like in the language Awk?




;- Elan  [: - )]