数组与范围

数组与范围 #

数组 #

Ruby 中数组是可变的。

创建数组 #

创建时没有指定元素的位置会用 nil 进行填充。

空数组

arr = Array.new
arr = []

创建时指定长度

arr = Array.new(3)

创建时指定元素

arr2 = [1, 2, 3]
arr4 = Array(1..9)
arr5 = Array[1, 2, 3]
arr6 = Array.new(3) { |x| x * 3 }

使用数组 #

修改数组元素

arr[0] = 10
arr2.push(15)
arr3 << 10

读取数组元素

puts arr[0]
puts arr[-1]
puts arr.first
puts arr.last
puts arr[1..2]

删除元素

arr2.delete_at 2  # => 指定的索引
arr2.delete(15) # => 指定的元素
[1, 2, 3, 4, 5, 6, 7, 8, 9].delete_if { |i| i % 2 == 0 }

数组长度

puts arr.length
puts arr.size

遍历数组

for i in arr2
  puts i
end

数组的展开

Ruby 支持使用多个变量来对数组的值进行展开

x, y = [1, 2]
puts x # => 1
puts y # => 2

常用操作 #

[1, 2, 3, 4, 5].map { |i| i * 3 }
['one', 'two', 'three', 'four', 'six'].select { |name| name.length > 3 }
[1,2,3].each do |number|
    puts number
end

由于 Ruby 支持任意的方法重写,所以也可以自己实现 each 方法

class FibonacciNumbers
    NUMBERS = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

    def each
			NUMBERS.each {|number| yield number }
    end
end

f=FibonacciNumbers.new
f.each do |fibonacci_number|
  puts "A Fibonacci number multiplied by 10: #{fibonacci_number*10}"
end

范围 #

Range 使用 .. 表示左右都是闭区间,使用 ... 表示左闭右开

(1..3).each { |i| print i } #  => 1 2 3
(1...3).each { |i| print i } #  => 1 2

范围除了数字上也可以用在字符上

('a'..'d').each { |c| print c }

以上等于

'a'.upto('d').each { |c| print c }
沪ICP备17055033号-2