Ruby 集合与容器对象用法详解

作者:袖梨 2022-06-25

数组(array),散列(hash)。array 里的项目有顺序,你可以用索引号得到对应的项目。hash 里的项目是成对的,一对里有个 key 还有个对应的 value。得到项目的 value 可以使用项目的 key 。

任何的 Ruby 对象都可以作为 hash 的 key 或者 value ,不过注意 key 在 hash 里一定是唯一的。hash 在其它的语言上也叫 dictionaries 或者 associative arrays  。

array 与 hash 很像。在某种意义上 array 就是 hash,只不过它的 key 是连续的整数。hash 有某种意义上也是 array,只不过索引可以是任何东西。

做个实验:

array = ["ruby", "diamond", "emerald"]
hash = { 0 => "ruby", 1 => "diamond", 2 => "emerald" }
puts array[0] # ruby
puts hash[0] # ruby
再做个实验:

hash = { "red" => "ruby", "white" => "diamond", "green" => "emerald" }
hash.each.with_index {|(key,value),i|
  puts "Pair #{i} is: #{key}/#{value}"
}
输出的是:

Pair 0 is: red/ruby
Pair 1 is: white/diamond
Pair 2 is: green/emerald
数组

创建新数组

有几种方法:

Array.new 方法
字面构造器:[]
Array 顶级方法
%w{...},%i{...}
Array.new

a = Array.new
设置数组的尺寸与内容:

>> Array.new(3)
=> [nil, nil, nil]
>> Array.new(3, "abc")
=> ["abc", "abc", "abc"]
提供一个代码块:

>> n = 0
=> 0
>> Array.new(3) { n += 1; n * 10 }
=> [10, 20, 30]
再做个实验:

>> a = Array.new(3, "abc")
=> ["abc", "abc", "abc"]
>> a[0] << "def"
=> "abcdef"
>> puts a[1]
abcdef
=> nil
上面的 abc 是同一个东西。想不同的话需要这样:

Array.new(3) { "abc" }
字面构造器

数组字面构造器是:[]

a = []
创建的时候可以直接往数组里添加对象:

a = [1,2,"three",4,[]]
Array 方法

>> string = 'hello'
=> "hello"
>> string.respond_to?(:to_ary)
=> false
>> string.respond_to?(:to_a)
=> false
>> Array(string)
=> ["hello"]
>> def string.to_a
>>   split(//)
>> end
=> :to_a
>> Array(string)
=> ["h", "e", "l", "l", "o"]
%w 与 %W

>> %w{ I Love You }
=> ["I", "Love", "You"]
%W 可以用双引号解析。

%i 与 %I

符号数组。

>> %i{ a b c }
=> [:a, :b, :c]
>> w = "love"
=> "love"
>> %I{"#{w}"}
=> [:""love""]
try_convert

>> obj = Object.new
=> #












































<<

<<










































































































































































































































&block


































<


<

<
























<<

<<











&










&
























相关文章

精彩推荐