2.1数组 对于Python中的列表list
基本操作与Python差不多,有一个区别就是
irb(main):016:0> arr => [] irb(main):017:0> arr[5]='a' => "a" irb(main):018:0> arr => [nil, nil, nil, nil, nil, "a"] irb(main):019:0>
给一个超过索引范围的,会给一个值,前面的空位会填充nil
arr.size查看数组的大小
数组的循环
通过each方法实现
数组.each do |变量|
希望循环的处理
end
each后面的do~end之间的部分称为块(block)。each这样的方法称为带块的方法
>> name = ["xiao","大"] => ["xiao", "大"] >> name.each do |n| ?> p n >> end "xiao" "大" => ["xiao", "大"] >>
散列 对应Python中的列表
散列(hash)也是一个程序中常用的容器。在散列中,一般是以字符串或者符号作为键来保存对应的对象
什么是符号
符号(symbol)与字符串对象很相似,符号也是对象,一般作为名称便签使用,表示方法等的对象的名称。
要创建符号只要在标识符的开头加上:就可以了
>> sym = :foo => :foo >> sym2 = :"foo" # 效果与第一个相等 => :foo >>
符号能实现的功能,大部分字符串也能实现。但在想散列的键这样只是单纯判断"是否相等"的处理中,使用符号会比字符串更加有效率,因此在实际编程中我们也会时常用到符号。
另外,符号与字符串可以互相转换。对符号使用to_s方法,则可以得到对应的字符串。反之,对字符串使用to_sym方法,则可以得到对应的符号
>> sym => :foo >> sym.to_s => "foo" >> "foo".to_sym => :foo >>
散列的创建
>> hash1 = {"a":1,"b":2} => {:a=>1, :b=>2} >> hash1 = {"a"=>1,"b"=>2} => {"a"=>1, "b"=>2} >> hash2 = {:a=>1,:b=>2} => {:a=>1, :b=>2} >>
创建可以通过=>创建,如果使用:创建的话,key会编程symbol
散列的使用(与Pythondict基本相同)
通过key取值与赋值
散列的循环
同样通过each
>> address = {name:"la",pingying:"olal"} => {:name=>"la", :pingying=>"olal"} >> address.each do |key, value| ?> puts "#{key} is #{value}" >> end name is la pingying is olal => {:name=>"la", :pingying=>"olal"} >>
正则表达式
/模式/ ,用=~来匹配正则表达式和字符串
/模式/ =~ 希望匹配的字符串
匹配成功返回字符的位置,从0开始,返回返回nil
>> /Ruby/ =~ "I like Ruby much" => 7 >> /Ruby/ =~ "Ruby" => 0 >> /Ruby/ =~ "R1uby" => nil >>
在表达式的后面,也就是右边加上i会忽略大小写
>> /Ruby/i=~"ruby" => 0 >> /Ruby/i=~"rubY" => 0 >>
nil是一个特殊的值,表示对象不存在。像正则表达式无法匹配就返回nil,数组或者hash取不到值的时候也会返回nil
if 条件在 nil与false的时候不执行,另外条件都为真。