Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Classes / Array2D.schelp
blob78992855442f33746f5003b5d50b8dddbe9fcfec
1 CLASS::Array2D
2 summary::two-dimensional array
3 related::Classes/Array
4 categories::Collections>Ordered
6 DESCRIPTION::
7 Represents a two-dimensional array of data. The number of rows and columns is fixed.
9 note:: It is possible to implement a similar behaviour using an "array-of-arrays" - see the examples towards the bottom of this page for comparison.::
11 CLASSMETHODS::
13 method::new
14 Create an array of the specified size.
15 code::
16 a = Array2D.new(3,4);
17 a[2,2] = 1;
18 a.postln
21 method::fromArray
22 Build an Array2D from the supplied array.
23 code::
24 a = Array2D.fromArray(3,4, [9,8,7,6,5,4,3,2,1,2,3,4]);
25 a[2,2] = 1;
26 a.postln
29 INSTANCEMETHODS::
31 private::printOn, storeOn
33 method::at
34 Get a value from the array.
35 code::
36 a.at(2,3);
37 a[2,3];
40 method::put
41 Put a value into the array.
42 code::
43 a.put(2,3, 72);
44 a[2,3];
47 method::colsDo
48 Iterate over the columns. Each column will be passed to strong::func:: in turn.
49 code::
50 a.colsDo(_.postln);
53 method::rowsDo
54 Iterate over the rows. Each row will be passed to strong::func:: in turn.
55 code::
56 a.rowsDo(_.postln);
59 method::colAt
60 Retrieve a single column.
61 code::
62 a.colAt(2);
65 method::rowAt
66 Retrieve a single row.
67 code::
68 a.rowAt(2);
71 method::asArray
72 Return a flat array containing the elements.
73 code::
74 a.postln;
75 a.asArray.postln;
77 returns:: link::Classes/Array::
79 EXAMPLES::
81 code::
82 // "a" is an array-of-arrays
83 a = { { 100.0.rand }.dup(100) }.dup(100);
84 // "b" is an equivalent Array2D, made using the "fromArray" class method
85 b = Array2D.fromArray(100,100, a.flat);
87 // Accessing
88 a[15][22]
89 b[15, 22]
91 // Speed comparison 1: random access
92 bench { 100.do(a[100.rand][100.rand]) }
93 bench { 100.do(b[100.rand, 100.rand]) }
95 // Speed comparison 2: iteration
96 bench { 100.do(a.do { |row| row.do { |item| item * 2 } }) }
97 bench { 100.do(b.do { |item| item * 2 }) }