Vysvětlit/zmínit se co je pole
Pole (Array
) je setříděná množina prvků indexovaná celými čísly. Index začínají od 0
a postupují k vyšším číslům. Záporný index je interpretován jako relativní od konce množiny. T.j. index -1
označuje poslední prvek, index -2
pak prvek předposlední, atd.
Než si začneme vykládat o polích, tak si dáme malou ukázku.
# $Id: array-intro.ses,v 1.1 2003/11/19 23:54:35 radek Exp $[[1,2,3],[4,5,6],[7,8,9]].each {|arr| puts arr.join(',')}
1,2,3
4,5,6
7,8,9
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
$a = [[1,2,3],[4,5,6],[7,8,9]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
(0..2).each do |i|
(0..2).each do |j|
print $a[i][j]
end
print "\n"
end
123
456
789
0..2
Pole v Ruby ma šírší použití než jaké známe z jazyků jako je C, Pascal. V Ruby používáme pole mimo klasického způsobu také misto seznamů (list) a n-tic (tuple). Vzhledem k častosti svého použití má vlastní syntaxi pro vytváření nových polí. Místo obvyklého
aArray = Array.new
můžeme psát
aArray = []
Prvky pole jsou číslovány celými čísly počínaje nulou. Na první prvek se tedy odkazujeme aArray[0]
, na druhý aArray[1]
, a tak dále. Mimo kladné celé čísla a nuly můžeme použít i záporné indexy. Tyto záporné indexy počítají prvky pole od konce s tím rozdílem, že pro poslední prvek je použit index -1
. Tedy aArray[-1]
je poslední prvek v poli, aArray[-2]
je předposlední prvek a tak dále.
Při generování tabulek pro program v C jsem potřeboval tyto pěkně formátovat. Není třeba psát algoritmus na mnoho řádků. S výhodou lze použít metody each_slice
, která seskupí prvky pole po skupinách. Poté správnou aplikací join
dosáhneme požadovaného efektu.
puts tabulka.collect{|n| "%3d" % n.to_i} \ .each_slice(8).collect{ |row| "\t" + row.join(', ') }.join ",\n"
irb(main):007:0>
puts (1..19).each_slice(5).collect{|row| "\t" + row.join(', ')}.join ",\n"
1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14, 15,
16, 17, 18, 19
=> nil