2. array2.rb
在数组中存放不同的数据类型,甚至可以包含一个可以计算其值的表达式。让我们假设你已
经创建了这个方法:
def hello
return “hello world”
end
现在你可以这么声明数组了:
x = [1+2,hello,`dir`]
在该数组中,第一个元素是整数 3,第二个是字符串”hello world”(方法 hello 返回的)。
如果你在 Windows 上运行该程序,第三个元素将会是一个路径名的字符串。这取决于`dir`
是一个反引号字符串,该字符串将会由操作系统执行(详见第三章)。该数组最后的'槽'由 dir
命令行的返回值填充,该值为一个文件名的字符串表示。如果你在一个其他的操作系统运行
的话,你需要将其替换为一个相应命令。
dir_array.rb
创建一个文件名的数组
大部分的 Ruby 内置类的方法返回数组。例如, Dir 类,该类用于对磁盘目录进行操作,有
一个方法 entries 。传入一个路径名给该方法,它以数组形式返回所有文件的列表:
Dir.entries('C:') #returns an array of files in C:
如果你想创建一个单引号字符串的数组,但是又不想频繁地输入所有的引号符,一个捷径就
是将所有文本输入,不使用引号但是使用空格来分隔它们,然后将这些文本放置于一个
由%w 开头后接的一个括号中:
array2.rb
y = %w(this is an array of strings)
你也可以通过对象的构造方法 new 来创建一个数组。你可以传入(也可不传)一个整数给
new 方法来创建一个指定大小的空数组(每个对象都设置为 nil),或者你可以传入两个参数
——第一个参数用于设置数组大小,第二个参数用于指定数组中所有项的初始值,如下:
4. 全面索引数组
你可以通过使用 for 循环来索引数组中的每一个元素来迭代数组中所有的元素。这个循环将
迭代两个元素:即在索引 0 和 1 的两个子数组:
for i in multiar
puts(i.inspect)
end
这将打印出:
["one", "two", "three", "four"]
[1, 2, 3, 4]
那么,你如何来索引这两个子数组中的所有项(字符串和整型值)呢?如果有项目数是确定的,
你可以为每一个子数组声明一个迭代变量,在不同的情况下,每一个变量将被赋值为相应索
引处的子数组。
如果有四个子数组槽,你可以如下使用四个变量来获取每一个子数组:
for (a,b,c,d) in multiarr
print("a=#{a}, b=#{b}, c=#{c}, d=#{d}n" )
end
迭代和循环
在一个 for 循环中的代码将执行某表达式中的每一个元素。语法可以概括为:
for<one or more variables> in <expression> do
<code to run>
end
当你提供多个变量时,这些变量都将传递到 for..end 块中的代码中,就像你传递参数给一
个方法一般。例如,你可以假设 (a,b,c,d) 是参数,每次循环使用 multiarr 中的一行初始
化其中一个元素 :
for(a,b,c,d) in multiarr
print(“a=#{a},b=#{b},c=#{c},d=#{d}n”)
end
我们将在下一章中再详细讨论 for 循环。
你也可以使用一个 for 循环来迭代每一个子数组中的所有项:
for s in multiarr[0] multi_array2.rb
5. puts(s)
end
for s in multiarr[1]
puts(s)
end
上面的两种方式(复合迭代或者复合循环)都有两个要求:a)那就是你需要知道数组网格的行
数和列数;b)那就是每一个子数组中的包含的项目数是相等的。
为了能更灵活地迭代多维数组,你可以使用内嵌 for 循环。一个外部循环迭代每行(也就是子
数组),内循环迭代当前行中每一项。这种方式即使是在子数组拥有可变项数时也能很好的工
作:
for row in multiarr
for item in row
puts(item)
end
end
数组索引
和数组一样(详见第三章),你可以使用负数从一个数组的尾端开始进行索引,-1 是最后一
个元素,同样你也可以使用区间符:
array_index.rb
arr = ['h','e','l','l','o',' ','w','o','r','l','d']
print( arr[0,5] ) #=> „hello‟
print( arr[-5,5 ] ) #=> „world‟
print( arr[0..4] ) #=> „hello‟
print( arr[-5..-1] ) #=> „world‟
注意,和字符串一样,当你提供两个整型数来返回数组中一组邻近的项时,第一个整型数是
索引的起始值,第二个值是需要索引的项目总数(而不是索引值):
arr[0,5] # returns 5 chars - ["h", "e", "l", "l", "o"]
array_assign.rb