我是靠谱客的博主 拼搏小熊猫,最近开发中收集的这篇文章主要介绍ruby之旅之数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数组:

①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.reject { |item| block }
返回一个新的数组,包含当 block 不为 true 时的数组项。
array.reject! { |item| block }
当 block 为真时,从 array 删除元素,如果没有变化则返回 nil。相当于 Array#delete_if

代码如下:
	arr_1,arr_2 = %w{欲洁何曾洁 云空未必空},%w{可怜金玉质 终陷淖泥中 王熙凤}
	arr_3,arr_4 = %w{三纲者 君臣义 父子亲 夫妇顺},%w{曰春夏 曰秋冬 此四时 运不穷}
	arr_1.delete_if{arr_1.length <=2}
	arr_2.delete_if{arr_2.length >5}
	p arr_1,arr_2
	p arr_3.reject{|ele| ele=~/三/}
	p arr_3.reject{|ele| ele.length<=3}
	p arr_4.reject!{|ele| ele=~/秋/}
	p arr_4.reject!{|ele| ele=~/三/}	
输出结果:
	[]
	["可怜金玉质", "终陷淖泥中", "王熙凤"]
	["君臣义", "父子亲", "夫妇顺"]
	[]
	["曰春夏", "此四时", "运不穷"]
	nil

(3.7)array.pop
从 array 中移除最后一个元素,并返回该元素。如果 array 为空则返回 nil

代码如下:
	arr = %w{首孝悌 次见闻 知某数 识某文}
	p arr.pop
	p arr
输出结果:
	"识某文"
	["首孝悌", "次见闻", "知某数"]

4.数组的【改】

(4.1)array & other_array 返回一个新的数组,包含两个数组中共同的元素,没有重复【去重】。

代码如下:
	part_dizhi = ["子","丑","寅","卯","辰"]
	all_dizhi = ["子","丑","寅","卯","辰","巳","午","未","申","酉(yǒu)","戌","亥"]
	comm_dizhi = part_dizhi &all_dizhi
	p comm_dizhi
输出结果:
	["子", "丑", "寅", "卯", "辰"]

(4.2)arrayint arraystr
①array * int 将原数组的所有元素复制int次,放入到新数组中返回
代码如下:
shengxiao = [“子鼠”,“丑牛”,“寅虎”,“卯兔”]
new_s_x = shengxiao*2
p new_s_x
输出结果:
[“子鼠”, “丑牛”, “寅虎”, “卯兔”, “子鼠”, “丑牛”, “寅虎”, “卯兔”]
(4.3)array.abbrev(pattern = nil)
为self中的字符串计算明确的缩写集合。如果传递一个模式或一个字符串,只考虑当字符串匹配模式或者以该字符串开始时的情况,其结果集是个hash

代码如下:
	require 'Abbrev.rb'
	p %w{cat bg mj}.abbrev("b")

输出结果:
	{"bg"=>"bg", "b"=>"bg"}

②array * str 在原数组的每个元素后面加入str的内容,以字符串的形式返回。

代码如下:
	address = ["江苏省","南京市","雨花台区","软件谷"]
	separator = "|"
	new_addr = address*separator
	p new_addr
输出结果:
	"江苏省|南京市|雨花台区|软件谷"

(4.3)替换数组中的元素
①array[index] = obj 若index小于原数组的长度,则替换原数组对应索引处的元素为obj;若index等于原数组的长度,则等效于给原数组末尾添加元素;若index大于原数组的长度,则将原数组变为长度为index+1的数组,其中索引从原数组.length处到index-1处的元素为nil,索引为index的元素为obj.

代码如下:
		class Replace_elem
			def replace_1(str)
				arr = ["甲子","乙丑","丙寅","丁卯"]
				arr[1]= str
				p arr
			end
			def replace_2(str)
				arr = ["甲子","乙丑","丙寅","丁卯"]
				arr[-1]= str
				p arr
			end
			def replace_3(str)
				arr = ["甲子","乙丑","丙寅","丁卯"]
				arr[4]=str
				p arr
			end
			def replace_4(str)
				arr = ["甲子","乙丑","丙寅","丁卯"]
				arr[6]=str
				p arr
			end
		end
		rep = Replace_elem.new
		rep.replace_1("乙丑年")
		rep.replace_2("")
		rep.replace_3("戊辰")
		rep.replace_4("庚午")
	
	输出结果:
		["甲子", "乙丑年", "丙寅", "丁卯"]
		["甲子", "乙丑", "丙寅", ""]
		["甲子", "乙丑", "丙寅", "丁卯", "戊辰"]
		["甲子", "乙丑", "丙寅", "丁卯", nil, nil, "庚午"]	
		
②array[start, length] = obj or an_array or nil	替换原数组中索引从start 开始直至 length 个元素的子数组

	代码如下:
		def replace_1(start,len,my_arr)
			arr = ["name:Tom","gender:male","age:18","from:France","hobby:beauty","graduated:Oxford"]
			arr[start,len] = my_arr
			p arr
		end
		replace_1(1,2,["gender:female","age:24"])
		replace_1(3,0,["income:9000"])
		replace_1(9,3,"working in:Tencent")
		replace_1(4,2,nil)
	输出结果:
		["name:Tom", "gender:female", "age:24", "from:France", "hobby:beauty", "graduated:Oxford"]
		["name:Tom", "gender:male", "age:18", "income:9000", "from:France", "hobby:beauty", "graduated:Oxford"]
		["name:Tom", "gender:male", "age:18", "from:France", "hobby:beauty", "graduated:Oxford", nil, nil, nil, "working in:Tencent"]
		["name:Tom", "gender:male", "age:18", "from:France", nil]
		
③array[range] = obj or an_array or nil			将原数组中索引range 指定范围的元素替换
	代码如下:
		def replace_1(start,myend,my_arr)
			arr = ["桃园三结义","王司徒巧使连环计","董太师大闹凤仪亭","太史慈酣斗小霸王","下邳城曹操鏖兵","美髯公千里走单骑"]
			arr[start..myend] = my_arr
			p arr
		end
		replace_1(1,3,["汉寿侯五关斩六将","会古城主臣聚义","蔡夫人隔屏听密语"])
	
	输出结果:
		["桃园三结义", "汉寿侯五关斩六将", "会古城主臣聚义", "蔡夫人隔屏听密语", "下邳城曹操鏖兵", "美髯公千里走单骑"]
	
	
【注】如果索引大于数组的当前容量,那么数组会自动增长。负值索引从数组末尾开始计数。如果 length 为零则插入元素。如果在第二种或第三种形式中使用了 nil,则从 self 删除元素,替换为nil。	

(4.4)array.compact
返回 self 的副本,移除了所有的 nil 元素,并返回移除nil元素之后的新数组,如果没有nil元素,返回self
array.compact!
返回 self 的副本,移除了所有的 nil 元素。如果没有变化则返回 nil。

 代码如下:
	arr_1 = ["林黛玉","薛宝钗",nil,"贾元春",nil]
	arr_2 = arr_1.compact
	arr_3 = arr_2.compact
	arr_4 = arr_2.compact!
	p arr_2,arr_3,arr_4
 输出结果:
	["林黛玉", "薛宝钗", "贾元春"]
	["林黛玉", "薛宝钗", "贾元春"]
	nil

(4.5)替换、修改给定范围的元素
array.fill(obj)
array.fill(obj, start [, length])
array.fill(obj, range)
array.fill { |index| block }
array.fill(start [, length] ) { |index| block }
array.fill(range) { |index| block }
前面三种形式设置 self 的被选元素为 obj。以 nil 开头相当于零。nil 的长度相当于 self.length。最后三种形式用 block 的值填充数组。block 通过带有被填充的每个元素的绝对索引来传递

 代码如下:
	module MyFill
		def MyFill.fill01(arr,str)
			arr.fill(str)
			p arr
		end
		def MyFill.fill02(arr,str,num)
			arr.fill(str,num)
			p arr
		end
		def MyFill.fill03(arr,str,start_num,end_num)
			arr.fill(str,start_num..end_num)
			p arr
		end
		def MyFill.fill04(arr)
			arr.fill{|index| 
				if arr[index]=~/北影/
					arr[index]="上戏"
				else
					arr[index]=arr[index]
				end
			}
			p arr
		end
		def MyFill.fill05(arr,start_num)
			arr.fill(start_num){|index| 
				if arr[index]=~/d{3,}/ 
					arr[index]= 5000000
				else
					arr[index]=arr[index]
				end
			}
			p arr
		end
		def MyFill.fill06(arr,start_num,end_num)
			arr.fill(start_num...end_num){|index|
				if index%2==0
					arr[index]= 18
				else
					arr[index]=arr[index]
				end
			}
			p arr
		end
	end
	arr01 = %w{人之初 性本善 性相近 苟不教 性乃迁 教之道 贵以专}
	arr02 = %w{人之初 性本善 性相近 苟不教 性乃迁 教之道 贵以专}
	arr03 = %w{人之初 性本善 性相近 苟不教 性乃迁 教之道 贵以专}
	str = "习相远"
	arr04 = %W{章子怡 female 28 演员 北京人 北影 1000000}
	arr05 = %W{章子怡 female 28 演员 北京人 北影 1000000}
	arr06 = %W{章子怡 female 28 演员 北京人 北影 1000000}
	MyFill.fill01(arr01,str)
	MyFill.fill02(arr02,str,3)
	MyFill.fill03(arr03,str,3,5)
	MyFill.fill04(arr04)
	MyFill.fill05(arr05,1)
	MyFill.fill06(arr06,1,3)
	
输出结果:
	["习相远", "习相远", "习相远", "习相远", "习相远", "习相远", "习相远"]
	["人之初", "性本善", "性相近", "习相远", "习相远", "习相远", "习相远"]
	["人之初", "性本善", "性相近", "习相远", "习相远", "习相远", "贵以专"]
	["章子怡", "female", "28", "演员", "北京人", "上戏", "1000000"]
	["章子怡", "female", "28", "演员", "北京人", "北影", 5000000]
	["章子怡", "female", 18, "演员", "北京人", "北影", "1000000"]

(4.6)数组扁平化
array.flatten
返回一个新的数组,新数组是一个一维的扁平化的数组(递归)
array.flatten!
把 array 进行扁平化。如果没有变化则返回 nil。(数组不包含子数组。

代码如下:
	arr01 = ["昔孟母",['择邻处','子不学',["断机杼","窦燕山","有义方","教五子"]],"名俱扬"]
	arr02 = %w{养不教 父之过 教不严 师之惰}
	p arr01.flatten!
	p arr02.flatten
	p arr02.flatten!
输出结果:
	["昔孟母", "择邻处", "子不学", "断机杼", "窦燕山", "有义方", "教五子", "名俱扬"]
	["养不教", "父之过", "教不严", "师之惰"]
	nil

(4.7)array.insert(index, obj…)
在给定的 index 的元素前插入给定的值,index 可以是负值。
代码如下:
arr = %w{为人子 方少时 习礼仪}
obj = “亲师友”
arr.insert(2,obj)
p arr
输出结果:
[“为人子”, “方少时”, “亲师友”, “习礼仪”]
(4.8)array.join(sep=$,)
返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的

 代码如下:
	 arr = %w{香九龄 能温席 孝于亲 所当执}
	 p arr.join(",")
 输出结果:
	"香九龄,能温席,孝于亲,所当执"

(4.9)array.inspect
创建一个数组的可打印版本。

代码如下:
	 arr = %w{香九龄 能温席 孝于亲 所当执}
	 p arr.inspect
输出结果:
	"["香九龄", "能温席", "孝于亲", "所当执"]"	

(4.10)array.replace(other_array)
把 array 的内容替换为 other_array 的内容,必要的时候进行截断或扩充

 代码如下:
	arr01 = %w{曰南北 曰西东 此四方 应乎中}
	arr02 = %w{曰水火 木金土 此五行 本乎数}
	arr01.replace(arr02)
	p arr01
 输出结果:
	["曰水火", "木金土", "此五行", "本乎数"]

(4.11)array.reverse
返回一个新的数组,包含倒序排列的数组元素
array.reverse! 把 array 进行逆转

代码如下:
	arr = %w{十干者 甲至癸 十二支 子至亥}
	p arr.reverse
输出结果:
	["子至亥", "十二支", "甲至癸", "十干者"]

(4.12)array.shift
返回 self 的第一个元素,并移除该元素(把所有的其他元素下移一位)。如果数组为空,则返回 nil

 代码如下:
	arr = %w{寒燠均 霜露改 右高原 左大海}
	p arr.shift
	p arr
 输出结果:
	"寒燠均"
	["霜露改", "右高原", "左大海"]

(4.13)给数组排序
array.sort
array.sort { | a,b | block }
返回一个排序的数组
array.sort!
array.sort! { | a,b | block }
把数组进行排序

代码如下:
	arr = %w{a g h d b r c}
	p arr.sort!
	p arr.sort{|a,b| b<=>a}
输出结果:
	["a", "b", "c", "d", "g", "h", "r"]
	["r", "h", "g", "d", "c", "b", "a"]

(4.14)array.transpose
假设 self 是数组的数组,且置换行和列

(4.15)array.uniq
返回一个新的数组,移除了 array 中的重复值。
array.uniq!
从 self 中移除重复元素。如果没有变化(也就是说,未找到重复),则返回 nil。

 代码如下:
	arr01 = %w{1 2 3 5 3 5 2 4 3 2 5}
	p arr01.uniq
 输出结果:
	["1", "2", "3", "5", "4"]

(4.16)array.unshift(obj, …)
把对象前置在数组的前面,其他元素上移一位。

 代码如下:
	arr = %w[d f g r k l b s]
	obj1 = "z"
	obj2 = "y"
	arr.unshift(obj1,obj2)
	p arr

 输出结果:
	["z", "y", "d", "f", "g", "r", "k", "l", "b", "s"]

(4.17)array.values_at(selector,…)
返回一个数组,包含 self 中与给定的 selector(一个或多个)相对应的元素。选择器可以是整数索引或者范围。

  代码如下:
	arr = %w[a b h t k d m c b t w r o]
	p arr.values_at(3,2,6,4)
  输出结果:
	["t", "h", "m", "k"]

(4.18)array.zip(arg, …) [or]
array.zip(arg, …){ | arr | block }
把任何参数转换为数组,然后把 array 的元素与每个参数中相对应的元素合并

  代码如下:
	arr  =  %w[1 6]
	arg1 = %w[1 2 3]
	arg2 = %w[4 7 9]
	p arr.zip(arg1,arg2)
  输出结果:
	[["1", "1", "4"], ["6", "2", "7"]]

5.数组的【查】

(5.1)arr <=> other_array 比较两个数组中相同位置的元素,如果索引为0的位置上的元素相同,比较索引为1的,如果数组arr索引为1的元素大于other_array,返回1,如果小于就返回0,如果比较完所有的元素都相同就返回0

代码如下:
	def equal_arr(str1,str2,str3,str4)
		new_arr = [str1,str2,str3,str4]
		init_arr = ["h","a","l","s"]
		@num = new_arr<=>init_arr
		case @num 
		when 1
			p "new_arr大于init_arr"
		when 0
			p "new_arr等于ini人之初,性本善。性相近,习相远。t_arr"
		else
			p "new_arr小于init_arr"
		end
	end
	equal_arr("h","b","d","c")
	equal_arr("h","a","l","s")
	equal_arr("g","c","z","x")
		
输出结果:
	"new_arr大于init_arr"
	"new_arr等于init_arr"
	"new_arr小于init_arr"

(5.2)array == other_array 如果两个数组包含相同的元素个数,且每个元素与另一个数组中相对应的元素相等(根据 Object.==),那么这两个数组相等。

代码如下:
	def equal_arr(str1,str2)
		new_arr = [str1,str2]
		init_arr = [10,20]
		if new_arr == init_arr
			p "new_arr和init_arr相等"
		else
			p "new_arr和init_arr不相等"
		end
	end
	equal_arr(10,20)
	equal_arr(10,30)

输出结果:
	"new_arr和init_arr相等"
	"new_arr和init_arr不相等"

(5.3)array.eql?(other)
如果 array 和 other 是相同的对象,或者两个数组带有相同的内容,则返回 true。

代码如下:
	def my_eql(arr1,arr2)
		if arr1.eql?(arr2)
			p "arr1和arr2相等"
		else
			p "arr1不等于arr2"
		end
	end
	arr01 = %[子系中山狼 得志便猖狂]
	arr02 = arr01
	arr03 = arr01
	arr04 = #w{金闺花柳质 一载赴黄粱}
	my_eql(arr01,arr02)
	my_empty(arr03,arr04)
输出结果:
	"arr1和arr2相等"
	"arr1不等于arr2"

(5.4)获取数组中的元素
①array[index] 返回数组array中索引为 index 的元素
②array[start, length] 返回数组array中从 start 开始直至 length 个元素的子数组
③array[range] 返回数组array中range指定范围的子数组
④array.slice(index) 返回数组array中索引为 index 的元素
⑤array.slice(start, length) 返回数组array中从 start 开始直至 length 个元素的子数组
⑥array.slice(range) 返回数组array中range指定范围的子数组
【注】负值索引从数组末尾开始计数(-1 是最后一个元素)。如果 index(或开始索引)超出范围,则返回 nil。

代码如下:
	arr = [["西安","多云","5℃"],["成都","阴","10℃"],["上海","小雨","14℃"],["深圳","晴","20℃"]]
	element1 = arr[1]
	element2 = arr[1][0,2]
	element3 = arr[1..2]
	element4 = arr.slice(3)
	element5 = arr.slice(3)[0]
	element6 = arr.slice(2,2)
	element7 = arr.slice(1...3)
	element8 = arr[-1]
	element9 = arr.slice(-1)
	p element1,element2,element3,element4,element5,element6,element7,element8,element9
输出结果:
	["成都", "阴", "10℃"]
	["成都", "阴"]
	[["成都", "阴", "10℃"], ["上海", "小雨", "14℃"]]
	["深圳", "晴", "20℃"]
	"深圳"
	[["上海", "小雨", "14℃"], ["深圳", "晴", "20℃"]]
	[["成都", "阴", "10℃"], ["上海", "小雨", "14℃"]]
	["深圳", "晴", "20℃"]
	["深圳", "晴", "20℃"]

(5.5)array.at(index)
返回索引为 index 的元素。一个负值索引从 self 的末尾开始计数。如果索引超出范围则返回 nil。

代码如下:
	arr_1 = %w{可叹停机德(宝钗) 堪怜咏絮才(黛玉) 玉带林中挂(黛玉) 金簪雪里埋(宝钗)}
	arr_2 = arr_1.at(2)
	arr_3 = arr_1.at(-1)
	p arr_2,arr_3
输出结果:
	"玉带林中挂(黛玉)"
	"金簪雪里埋(宝钗)"

(5.6)array.collect { |item| block } [or]
array.map { |item| block }
array.collect! { |item| block } [or]
array.map! { |item| block }
为 self 中的每个元素调用一次 block。创建一个新的数组,包含 block对self中每个元素操作后返回的值。

 代码如下:
	arr_1 = ["马化腾","踌躇满志","一马当先","马失前蹄","腾云驾雾","前瞻后仰"]
	arr_new = []
	arr_1.collect{|element|
	arr_new << element if element =~/马/
	}
	p arr_new
 输出结果:
	["马化腾", "一马当先", "马失前蹄"]

(5.7)array.each { |item| block }
为self 中的每个元素调用一次 block,传递该元素作为参数

代码如下:
	arr_1 = %w{5 453 546 689 4 67 82}
	nums_3 = []
	arr_1.each{|poem| 
		nums_3 << poem if poem.to_i%3 == 0
	}
	p nums_3
输出结果:
	["453", "546"]

(5.8)array.each_index { |index| block }
与 Array#each 相同,但是传递元素的 index,而不是传递元素本身。

代码如下:
	arr_1 = %w{5 453 546 689 4 67 82}
	nums_3 = []
	arr_1.each_index{|ind| 
		nums_3 << arr_1[ind] if arr_1[ind].to_i%3 == 0
	}
	p nums_3
输出结果:
	["453", "546"]

(5.9)array.reverse_each {|item| block }
与 Array#each 相同,但是把 array 进行逆转

代码如下:
	arr = %w{曰黄道 日所躔 曰赤道 当中权}
	arr_new = []
	arr.reverse_each{|ele| 
		arr_new << ele
	}
	p arr_new
输出结果:
	["当中权", "曰赤道", "日所躔", "曰黄道"]

(5.10)array.select {|item| block }
调用从数组传入连续元素的 block,返回一个数组,包含 block 返回 true 值时的元素

代码如下:
	arr = %w{赤道下 温暖极 我中华 在东北}
	arr_new = []
	arr.select{|ele| 
		arr_new << ele
	}
	p arr_new
输出结果:
	["赤道下", "温暖极", "我中华", "在东北"]		

(5.11)array.empty?
如果数组本身没有包含元素,则返回 true。

 代码如下:
	def my_empty(arr_1)
		if arr_1.empty?
			p "arr_1是空数组"
		else
			p "arr_1不是空数组,其长度为#{arr_1.size}"
		end
	end
	arr_01 = %w{}
	arr_02 = %w{堪破三春景不长 缁衣顿改昔年装 可怜绣户侯门女 独卧青灯古佛旁}
	my_empty(arr_01)
	my_empty(arr_02)
 输出结果:
	"arr_1是空数组"
	"arr_1不是空数组,其长度为4"

(5.12)array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }
尝试返回位置 index 处的元素。如果 index 位于数组外部,则第一种形式会抛出 IndexError 异常,第二种形式会返回 default,第三种形式会返回调用 block 传入 index 的值。负值的 index 从数组末尾开始计数。

代码如下:  
  arr_1 = %w{势败休云贵 家亡莫论亲 偶因济村妇 巧得遇恩人}
  p arr_1.fetch(1)
  p arr_1.fetch(0,"not found the element")
  p arr_1.fetch(-1){p "数组越界异常"}

  # p arr_1.fetch(6)
  p arr_1.fetch(5,"not found the element")
  arr_1.fetch(8){p "数组越界异常"}
输出结果:
  "家亡莫论亲"
  "势败休云贵"
  "巧得遇恩人"
  index 6 outside of array bounds: -4...4 (IndexError)
  "not found the element"
  "数组越界异常"

(5.13)array.first
array.first(n)
返回数组的第一个元素或前 n 个元素。如果数组为空,则第一种形式返回 nil,第二种形式返回一个空的数组
array.last
array.last(n)
返回 self 的最后一个元素。如果数组为空,则第一种形式返回 nil

 代码如下:
	arr01 = %w[昔孟母 择邻处 子不学 断机杼]
	arr02 = %w{}
	p arr01.first
	p arr01.first(2)
	p arr02.first
	p arr02.first(4)
	p arr01.last
	p arr01.last(2)
	p arr02.last
	p arr02.last(4) 
 输出结果:
	"昔孟母"
	["昔孟母", "择邻处"]
	nil
	[]
	"断机杼"
	["子不学", "断机杼"]
	nil
	[]

(5.14)array.frozen?
如果 array 被冻结(或排序时暂时冻结),则返回 true

 代码如下:
	arr = %w{子不学 非所宜 幼不学 老何为}
	p arr.frozen?
 输出结果:
	false

(5.15)array.hash
计算数组的哈希代码。两个具有相同内容的数组将具有相同的哈希代码(哈希代码是动态变化的,每次执行都会不同)

代码如下:
	arr = %w{子不学 非所宜 幼不学 老何为}
	p arr.hash
输出结果:
	269892756

(5.16)array.include?(obj)
如果 self 中包含 obj,则返回 true,否则返回 false

代码如下:
	def my_include(arr,str)
		if arr.include?(str)
			p "数组arr中包含str"
		else
			p "数组arr中不包含str"
		end
	end
	arr01 = %w{玉不琢 不成器 人不学 不知义}
	str = "不知义"
	my_include(arr01,str)
输出结果:
	"数组arr中包含str"

(5.17)array.index(obj)
返回 self 中第一个等于 obj 的对象的 index。如果未找到匹配则返回 nil
array.rindex(obj)
返回 array 中最后一个等于 obj 的对象的索引。如果未找到匹配,则返回 nil

代码如下:
	arr01 = %w[10 20 67 43 56 356 57 67 20 67 43 56 23 67 8937 231 435 232]
	obj   = 67
	p arr01.index(obj.to_s)
	p arr01.rindex(obj.to_s)
输出结果:
	2
	13

(5.18)array.length
返回 self 中元素的个数。可能为零
array.size
返回 array 的长度(元素的个数)

  代码如下:
	arr01 = %w{融四岁 能让梨 弟于长 宜先知}
	p arr01.size
	p arr01.length
  输出结果:
	4
	4

(5.19)array.slice(index)
array.slice(start, length)
array.slice(range)
array[index]
array[start, length]
array[range]
返回索引为 index 的元素,或返回从 start 开始直至 length 个元素的子数组,或返回 range 指定的子数组。负值索引从数组末尾开始计数(-1 是最后一个元素)。如果 index(或开始索引)超出范围,则返回 nil
array.slice!(index)
array.slice!(start, length)
array.slice!(range)
删除 index(长度是可选的)或 range 指定的元素。返回被删除的对象、子数组,如果 index 超出范围,则返回 nil

  代码如下:
	arr01 = %w{曰江河 曰淮济 此四渎 水之纪 曰岱华 嵩恒衡 此五岳 山之名}
	arr02 = %w{曰士农 曰工商 此四民 国之良 曰仁义 礼智信 此五常 不容紊}
	arr03 = %w{地所生 有草木 此植物 遍水陆 有虫鱼 有鸟兽 此动物 能飞走}
	p arr01.slice(3)
	p arr01.slice(2,3)
	p arr01.slice(2..5)
	p arr01[3]
	p arr01[2,3]
	p arr01[2..5]
	p arr01.slice!(3),arr01
	p arr02.slice!(2,3),arr02
	p arr03.slice!(2..4),arr03
  输出结果:
	"水之纪"
	["此四渎", "水之纪", "曰岱华"]
	["此四渎", "水之纪", "曰岱华", "嵩恒衡"]
	"水之纪"
	["此四渎", "水之纪", "曰岱华"]
	["此四渎", "水之纪", "曰岱华", "嵩恒衡"]
	"水之纪"
	["曰江河", "曰淮济", "此四渎", "曰岱华", "嵩恒衡", "此五岳", "山之名"]
	["此四民", "国之良", "曰仁义"]
	["曰士农", "曰工商", "礼智信", "此五常", "不容紊"]
	["此植物", "遍水陆", "有虫鱼"]
	["地所生", "有草木", "有鸟兽", "此动物", "能飞走"]

最后

以上就是拼搏小熊猫为你收集整理的ruby之旅之数组的全部内容,希望文章能够帮你解决ruby之旅之数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部