| presidents=["John","Richard","Gerald","Ronald","George","William"]; |
为了更为容易地创建一个充满单词的数组,Ruby提供了一个特殊的标志来消除双引号和逗号,见下面例子:
| presidents= %w[ John Richard Gerald Ronald George William]; |
在其它编程语言中,"数组"一词经常意味着一组相同性质的对象的集合。但在Ruby中,不是这样。在Ruby中,一个"数组"可以是由不同性质的对象参考组成的集合。因此,下面是有效的数组表达形式:
| order_date=Date.today() shirt_information=[14.5,"Long",32,order_date] |
在这个数组中,对象参考按顺序存储并索引。象Java一样,索引从0开始,索引可用来从数组中检索对象参考。下面的示例中请求的是,上面创建的 shirt_information数组中的第3个元素(索引为2)。注意,你可以使用方括号标志或at方法来检索数组中的对象参考。
| irb(main):003:0> shirt_information[2] => 32 irb(main):004:0> shirt_information.at(2) => 32 |
有趣的是,你还可以使用一个负数索引来引用数组中的元素。一个负数索引是从数组尾部开始计数的。
| irb(main):005:0> shirt_information[-3] => "Long" |
数组是动态的,意味着数组的大小可以根据你的操作而动态地改变。你可以使用[index]=操作符来添加或替换一个数组中的元素。
| irb(main):013:0> shirt_information => [14.5, "Long", 32, #<Date: 4907585/2,0,2299161>] irb(main):014:0> shirt_information[1]="Medium" #change shirt length => "Medium" irb(main):015:0> shirt_information[4]=49.99 #add shirt cost => 49.99 irb(main):016:0> shirt_information => [14.5, "Medium", 32, #<Date: 4907585/2,0,2299161>, 49.99] |
你也可以使用数字对和范围来由数组的一部分创建一个新数组,通过使用一个[开始索引,元素数目]标志或[开始索引...结束索引]标志。
| irb(main):019:0> shirt_information => [14.5, "Long", 32, #<Date: 4907585/2,0,2299161>, 49.99] irb(main):020:0> shirt_dimensions = shirt_information[0,3] => [14.5, "Long", 32] irb(main):021:0> shirt_order = shirt_information[2..5] => [32, #<Date: 4907585/2,0,2299161>, 49.99] irb(main):030:0> shirt_information[-3,2] => [32, #<Date: 4907585/2,0,2299161>] |
这个结合了赋值运算符([]=)的标志将产生一个很复杂的元素插入或代替操作。一个开始/结束索引或范围可以用在赋值操作符中。具体使用请参考下面的示例:
| irb(main):001:0> test_array=["zero", "one", "two", "three", "four"] => ["zero", "one", "two", "three", "four"] irb(main):002:0> #starting at the second element, replace the next two elements with a single element irb(main):003:0* test_array[1,2]=1 => 1 irb(main):004:0> test_array => ["zero", 1, "three", "four"] irb(main):005:0> #insert a new element after the second one (zero as a second parameter indicates "insert") irb(main):006:0* test_array[2,0]=2 => 2 irb(main):007:0> test_array => ["zero", 1, 2, "three", "four"] irb(main):008:0> #add an array of elements after element 5 irb(main):009:0* test_array[5,0]=[5,6,7] => [5, 6, 7] irb(main):010:0> test_array => ["zero", 1, 2, "three", "four", 5, 6, 7] irb(main):011:0> #replace elements in the index range of 3..4 with the array assigned irb(main):012:0* test_array[3..4]=[3,4] => [3, 4] irb(main):013:0> test_array => ["zero", 1, 2, 3, 4, 5, 6, 7] |
最后,也许Ruby数组中最有力量的运算可以从数学操作符中找到答案-它们能够从现在数组创建新的数组。例如,+操作符允许你由两个数组的连接创建一个新数组,而*操作符允许你复制或连接一个数组自身若干次。
