数组:
①Ruby 数组可存储诸如 String、 Integer、 Fixnum、 Hash、 Symbol 等对象,甚至可以是其他 Array 对象。
②Ruby 数组不需要指定大小,当向数组添加元素时,Ruby 数组会自动增长
1.数组的创建
(1.1)通过 Array.new 创建
①创建一个不指定大小的空数组
arr = Array.new
②创建一个指定大小的空数组
arr = Array.new(20)
③创建数组的同时给每个数组元素赋值
【case1】只能初始化n个相同的值
代码如下:
city_name = Array.new(4,"北京")
p "#{city_name}"
输出结果:
["北京", "北京", "北京", "北京"]
【case2】使用带有 new 的块,每个元素使用块中的计算结果来填充
代码如下:
nums = Array.new(10){|i| i=(i+1)*2}
puts "#{nums}"
输出结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
(1.2)通过Array.[] 创建
代码如下:
city_name = Array.[]("北京","上海","广州","深圳")
puts "#{city_name}"
输出结果:
["北京", "上海", "广州", "深圳"]
(1.3)通过Array[] 创建
代码如下:
names = Array[“Peking University”,“Tsinghua University”,“Sun Yat-sen University”]
puts names
输出结果:
[“Peking University”, “Tsinghua University”, “Sun Yat-sen University”]
(1.4)通过*() 创建 【注】通过此方法创建括号内必须是个范围
代码如下:
words = *("aaa".."aah")
puts "#{words}"
输出结果:
["aaa", "aab", "aac", "aad", "aae", "aaf", "aag", "aah"]
(1.5)通过[] 创建 【推荐使用】
代码如下:
traffic_tool = ["airplane","train","bus"]
puts "#{traffic_tool}"
输出结果:
["airplane", "train", "bus"]
(1.6)通过%w创建一个数组
代码如下:
arr_1 = %w {bgp isis ospf}
p arr_1
输出结果:
["bgp", "isis", "ospf"]
2.数组的【增】
(2.1)array + other_array 返回一个新的数组,新数组通过连接两个数组产生第三个数组创建的。
代码如下:
tiangan_1 = ["甲","乙","丙、","丁","戊"]
tiangan_2 = ["己","庚","辛","壬(rén)","癸(guǐ)"]
all_tiangan = tiangan_1+tiangan_2
p all_tiangan
输出结果:
["甲", "乙", "丙、", "丁", "戊", "己", "庚", "辛", "壬(rén)", "癸(guǐ)"]
(2.2)array << obj 把给定的对象附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
代码如下:
arr_1 = ["可叹停机德","堪怜咏絮才","玉带林中挂"]
obj_1 = ["玉带林中挂","金簪雪里埋"]
arr_1 << obj_1
p arr_1
输出结果:
["可叹停机德", "堪怜咏絮才", "玉带林中挂", ["玉带林中挂", "金簪雪里埋"]]
(2.3)array.concat(other_array)
追加 other_array 中的元素到 self 中
代码如下:
arr_1 = %w{才自精明志自高 生于末世运偏消}
arr_2 = %w{清明涕泣江边望 千里东风一梦遥}
p arr_1.concat(arr_2)
输出结果:
["才自精明志自高", "生于末世运偏消", "清明涕泣江边望", "千里东风一梦遥"]
(2.4)array.push(obj, …)
把给定的 obj 附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起
代码如下:
arr01 = %w{一而十 十而百}
obj01 = "百而千"
obj02 = "千而万"
arr01.push(obj01,obj02)
p arr01
输出结果:
["一而十", "十而百", "百而千", "千而万"]
3.数组的【删】
(3.1)array - other_array 返回一个新的数组,新数组是从初始数组中移除了在 other_array 中出现元素。
代码如下:
arr_1 = ["toe","foot","shank","thigh","pea","banana"]
arr_2 = ["pea","banana","orange"]
p arr_1-arr_2
输出结果:
["toe", "foot", "shank", "thigh"]
(3.2)array | other_array 通过把 other_array 加入 array 中,移除重复项,返回一个新的数组【去重】。
代码如下:
arr_1 = ["10","20","30","20","40"]
arr_2 = ["30","60","50"]
arr_3 = arr_1 | arr_2
p arr_3
输出结果:
["10", "20", "30", "40", "60", "50"]
(3.3)array.clear
从数组中移除所有的元素
代码如下:
arr_1 = %w{二十年来辨是非 榴花开处照宫闱 三春争及初春景 虎兕相逢大梦归}
len_1 = arr_1.length
p "未做clear之前数组的长度#{len_1}"
arr_1.clear
len_2 = arr_1.length
p "做完clear之后数组的长度#{len_2}"
输出结果:
"未做clear之前数组的长度4"
"做完clear之后数组的长度0"
(3.4)array.delete(obj)
array.delete(obj) { block }
从 self 中删除等于 obj 的项。如果未找到相等项,则返回 nil。如果未找到相等项且给出了可选的代码 block,则返回 block 的结果。
代码如下:
arr_1 = %w{10.1.1.1 10.1.2.1 10.1.2.4}
arr_2 = %w{10.1.1.1 10.1.2.1 10.1.2.4}
str_3 = "10.1.1.1"
str_4 = "10.1.5.1"
p arr_1.delete(str_3),arr_1
p arr_2.delete(str_4)
p arr_2.delete(str_4){"10.1.5.1删除成功"}
输出结果:
"10.1.1.1"
["10.1.2.1", "10.1.2.4"]
nil
"10.1.5.1删除成功"
(3.5)array.delete_at(index)
删除指定的 index 处的元素,并返回该元素。如果 index 超出范围,则返回 nil
代码如下:
arr_1 = %w{富贵又何为 襁褓之间父母违 展眼吊斜辉 湘江水逝楚云飞}
p arr_1.delete_at(1),arr_1.delete_at(4)
输出结果:
"襁褓之间父母违"
nil
(3.6)array.delete_if { |item| block }
当 block 为 true 时,删除 self 的每个元素
array.rej