Arrays: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) |
m (→{{header|Phix}}: added syntax colouring the hard way, phix/basics) |
||
Line 5,284: | Line 5,284: | ||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
{{libheader|Phix/basics}} |
|||
In Phix, sequences are '''it''' - there are no other data structures to learn. |
In Phix, sequences are '''it''' - there are no other data structures to learn. |
||
Line 5,291: | Line 5,291: | ||
without any need to worry about memory management issues. |
without any need to worry about memory management issues. |
||
<lang Phix>-- |
<!--<lang Phix>--> |
||
<span style="color: #000080;font-style:italic;">-- simple one-dimensional arrays:</span> |
|||
sequence s1 = {0.5, 1, 4.7, 9}, -- length(s1) is now 4 |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">0.5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4.7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 4</span> |
|||
s2 = repeat(0,6), -- s2 is {0,0,0,0,0,0} |
|||
<span style="color: #000000;">s2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">),</span> <span style="color: #000080;font-style:italic;">-- s2 is {0,0,0,0,0,0}</span> |
|||
s3 = tagset(5) -- s3 is {1,2,3,4,5} |
|||
<span style="color: #000000;">s3</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- s3 is {1,2,3,4,5}</span> |
|||
?s1[3] -- displays 4.7 (nb 1-based indexing) |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- displays 4.7 (nb 1-based indexing)</span> |
|||
s1[3] = 0 -- replace that 4.7 |
|||
<span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> <span style="color: #000080;font-style:italic;">-- replace that 4.7</span> |
|||
s1 &= {5,6} -- length(s1) is now 6 ({0.5,1,0,9,5,6}) |
|||
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">&=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 6 ({0.5,1,0,9,5,6})</span> |
|||
s1 = s1[2..5] -- length(s1) is now 4 ({1,0,9,5}) |
|||
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">5</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 4 ({1,0,9,5})</span> |
|||
s1[2..3] = {2,3,4} -- length(s1) is now 5 ({1,2,3,4,5}) |
|||
<span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 5 ({1,2,3,4,5})</span> |
|||
s1 = append(s1,6) -- length(s1) is now 6 ({1,2,3,4,5,6}) |
|||
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 6 ({1,2,3,4,5,6})</span> |
|||
s1 = prepend(s1,0) -- length(s1) is now 7 ({0,1,2,3,4,5,6}) |
|||
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">prepend</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 7 ({0,1,2,3,4,5,6}) |
|||
-- negative subscripts can also be used, counting from the other end, eg |
|||
-- negative subscripts can also be used, counting from the other end, eg</span> |
|||
s2[-2..-1] = {-2,-1} -- s2 is now {0,0,0,0,-2,-1} |
|||
<span style="color: #000000;">s2</span><span style="color: #0000FF;">[-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- s2 is now {0,0,0,0,-2,-1} |
|||
-- multi dimensional arrays: |
|||
-- multi dimensional arrays:</span> |
|||
sequence y = {{{1,1},{3,3},{5,5}}, |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">}},</span> |
|||
{{0,0},{0,1},{9,1}}, |
|||
<span style="color: #0000FF;">{{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">9</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}},</span> |
|||
{{1,7},{1,1},{2,2}}} |
|||
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">}}}</span> |
|||
-- y[2][3][1] is 9 |
|||
<span style="color: #000080;font-style:italic;">-- y[2][3][1] is 9</span> |
|||
y = repeat(repeat(repeat(0,2),3),3) |
|||
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">),</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span> |
|||
-- same structure, but all 0s |
|||
<span style="color: #000080;font-style:italic;">-- same structure, but all 0s |
|||
-- Array of strings: |
|||
-- Array of strings:</span> |
|||
sequence s = {"Hello", "World", "Phix", "", "Last One"} |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Hello"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"World"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Phix"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">""</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Last One"</span><span style="color: #0000FF;">}</span> |
|||
-- s[3] is "Phix" |
|||
-- s[3 |
<span style="color: #000080;font-style:italic;">-- s[3] is "Phix" |
||
-- s[3][2] is 'h' |
|||
-- A Structure: |
|||
-- A Structure:</span> |
|||
sequence employee = {{"John","Smith"}, |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">employee</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #008000;">"John"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Smith"</span><span style="color: #0000FF;">},</span> |
|||
45000, |
|||
<span style="color: #000000;">45000</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">27</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">185.5</span><span style="color: #0000FF;">}</span> |
|||
-- To simplify access to elements within a structure it is good programming style to define constants that name the various fields, eg: |
|||
<span style="color: #000080;font-style:italic;">-- To simplify access to elements within a structure it is good programming style to define constants that name the various fields, eg:</span> |
|||
constant SALARY = 2 |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">SALARY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2</span> |
|||
-- Array of structures: |
|||
<span style="color: #000080;font-style:italic;">-- Array of structures:</span> |
|||
sequence employees = { |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">employees</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> |
|||
{{"Jane","Adams"}, 47000, 34, 135.5}, -- a[1] |
|||
<span style="color: #0000FF;">{{</span><span style="color: #008000;">"Jane"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Adams"</span><span style="color: #0000FF;">},</span> <span style="color: #000000;">47000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">34</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">135.5</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- a[1]</span> |
|||
{{"Bill","Jones"}, 57000, 48, 177.2}, -- a[2] |
|||
<span style="color: #0000FF;">{{</span><span style="color: #008000;">"Bill"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Jones"</span><span style="color: #0000FF;">},</span> <span style="color: #000000;">57000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">48</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">177.2</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- a[2] |
|||
-- .... etc. |
|||
-- .... etc.</span> |
|||
<span style="color: #0000FF;">}</span> |
|||
-- employees[2][SALARY] is 57000 |
|||
<span style="color: #000080;font-style:italic;">-- employees[2][SALARY] is 57000 |
|||
-- A tree can be represented easily, for example after adding "b","c","a" to it you might have: |
|||
-- A tree can be represented easily, for example after adding "b","c","a" to it you might have:</span> |
|||
sequence tree = {{"b",3,2}, |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #008000;">"b"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">},</span> |
|||
{"c",0,0}, |
|||
<span style="color: #0000FF;">{</span><span style="color: #008000;">"c"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},</span> |
|||
{"a",0,0}} |
|||
<span style="color: #0000FF;">{</span><span style="color: #008000;">"a"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">}}</span> |
|||
-- ie assuming |
|||
<span style="color: #000080;font-style:italic;">-- ie assuming </span> |
|||
constant ROOT=1, VALUE=1, LEFT=2, RIGHT=3 -- then |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">ROOT</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VALUE</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LEFT</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">RIGHT</span><span style="color: #0000FF;">=</span><span style="color: #000000;">3</span> <span style="color: #000080;font-style:italic;">-- then |
|||
-- tree[ROOT][VALUE] is "b" |
|||
-- tree[ROOT][ |
-- tree[ROOT][VALUE] is "b" |
||
-- tree[ROOT][ |
-- tree[ROOT][LEFT] is 3, and tree[3] is the "a" |
||
-- tree[ROOT][RIGHT] is 2, and tree[2] is the "c" |
|||
-- The operations you might use to build such a tree (tests/loops/etc omitted) could be: |
|||
-- The operations you might use to build such a tree (tests/loops/etc omitted) could be:</span> |
|||
tree = {} |
|||
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> |
|||
tree = append(tree,{"b",0,0}) |
|||
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"b"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">})</span> |
|||
tree = append(tree,{"c",0,0}) |
|||
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"c"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">})</span> |
|||
tree[1][RIGHT] = length(tree) |
|||
<span style="color: #000000;">tree</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">RIGHT</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">)</span> |
|||
tree = append(tree,{"a",0,0}) |
|||
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"a"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">})</span> |
|||
tree[1][LEFT] = length(tree) |
|||
<span style="color: #000000;">tree</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">LEFT</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000080;font-style:italic;">-- Finally, some tests (recall that we have already output a 4.7):</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">tree</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ROOT</span><span style="color: #0000FF;">][</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #000000;">employees</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">employees</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">employee</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">employees</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">][</span><span style="color: #000000;">SALARY</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">s1</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">s2</span> |
|||
<!--</lang>--> |
|||
-- Finally, some tests (recall that we have already output a 4.7): |
|||
?s[3] |
|||
?tree |
|||
?tree[ROOT][VALUE] |
|||
employees = append(employees, employee) |
|||
?employees[3][SALARY] |
|||
?s1 |
|||
?s2</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |