ruby数组操作方法汇总
1、数组定义
arr1 = []
arr2 = Array.new
arr3 = ['1','2','3']
2、输出
print arr3,"\n" #123
puts arr3[0] #1
print arr3.join(",") #1,2,3
3、访问数组元素
arr1[0]
arr1[-1] #这个比较有意思,意思是最后一个的数据
arr1.first
arr1.last
arr1.max
arr1.min
arr1.length
arr1.size 方式2:
irb(main):001:0> x = Array.new
=> [] irb(main):002:0> x = Array.new(3)
=> [nil, nil, nil] irb(main):003:0> x = Array.new(3,"a")
=> ["a", "a", "a"]
上述第一个创建空数组,第二个创建预设SIZE的数组,第三个创建预设SIZE和值的数组。
跟Hash一样,第三种方法填充的预设值,都指向同一个目标。
任何一个位置的目标改变了,都影响所有元素的值:
2、数组操作
arr3[4] = '5' #此时arr3[3]默认尾nil
arr3.delete_at(3) #删除指定下标的元素
arr3[2] = ["3a","3b","3c"] #可以这样来做
arr3.delete(["3a","3b","3c"]) #可以删除上面添加的
arr3.push('6') #插入元素
arr3.insert(3,"b") #在指定位置插入新元素
arr3<<"f"<<2 #从左至右一次加入元素
arr3.pop #删除尾元素
arr3.shift #删除首元素
arr3.clear #清空数组 pop方法表示从尾部删除元素,shift表示从首部删除元素:
对应的有unshift方法,表示从首部添加元素:
数组有push和<<方法,表示添加元素到数组尾部
3. 数组的类型转换?
数组可以转换成串,使用to_s或者join方法: irb(main):001:0> x=[1,2,3,4]
=> [1, 2, 3, 4] irb(main):002:0> x.to_s
=> "1234" irb(main):003:0> x.join "-"
=> "1-2-3-4"
串也可以转换成数组: irb(main):012:0> str="1 2 3 4"
=> "1 2 3 4" irb(main):013:0> str.to_a
=> ["1 2 3 4"]
这可能不是你想要的,那么执行: irb(main):018:0> str.split(/ /).map {|s| s
4 Hash可以直接转换成二维数组
irb(main):010:0> hash={1=>2,3=>4}
=> {1=>2, 3=>4}
irb(main):011:0> hash.to_a
=> [[1, 2], [3, 4]]
案例1:
a = [[:a, "apple"], [:b, "bear"]]
需求结果:{:a=>"apple", :b=>"bear"}
方式1:
h = a.inject({}){|dic,i| dic.merge({i[0]=>i[1]})}
方式2:
a.inject({ }) { |h, (k, v)| h[k] = v; h }
方式3:(after ruby2.1:)
a.to_h 案例2:(参考空气1.0质量周报)
@zm_hash={}
zm_data.each do |zm|
Rails.logger.info "---zm--#{zm}------"
Rails.logger.info "---zm_item_name--#{zm['item_name']}------"
Rails.logger.info "---zm_item_vale--#{zm['item_vale']}------"
@zm_hash[zm['item_name']] = zm['item_vale']
end
6、数组运算
aaa = [" aa ",4,5," bb "]
bbb = [4,1,3,2,5]
print aaa + bbb,"\n" # aa 45 bb 41325
print aaa*2,"\n" # aa 45 66 aa 45 66
print bbb - aaa #132
print aaa | bbb,"\n" # aa 45 bb 132
print aaa & bbb,"\n" #45
print bbb.sort,"\n" #12345 排序
print aaa.reverse,"\n" # bb 54 aa 倒置
print bbb.sort.reverse,"\n" #54321 降序
1. &
[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3]
取两个数组中都有的元素,但只取一个,不重复取。
2. *
[ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3]
如果*号后面跟的是数字n,将原先数组中的所有元素重复n次,串联起来。相当于普通数字的乘法操作。
[ 1, 2, 3 ] * "--" # => "1--2--3"
如果*号后面跟的是字符串,也将返回字符串。
3. +
[ 1, 2, 3 ] + [1, 4, 5 ] # => [1, 2, 3, 1, 4, 5]
简单的将两个数组连接在一起,不删除重复元素。
4. -
[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]
# => [3, 3, 5]
从第一个数组中删除所有出现在第二给数组中的元素。
5. <<
[ 1, 2 ] << "c" << "d" << [ 3, 4 ] << [3, 4]
# => [1, 2, "c", "d", [3, 4], [3, 4]]
在数组末尾添加新元素,也不管重复不重复。
6. ==
[ "a", "c" ] == [ "a", "c", 7 ] # => false
[ "a", "c", 7 ] == [ "a", "c", 7 ] # => true
[ "a", "c", 7 ] == [ "a", "d", "f" ] # => false
判断两个数组是否相等——数组相等的前提是,数组所有元素相等,数组大小也当然相等。
7. |
[ "a", "b", "c" ] | [ "c", "d", "a" ]
# => ["a", "b", "c", "d"]
取两个数组中所有元素组成的集合,删除重复元素。
8. at
a = [ "a", "b", "c", "d", "e" ]
a.at(0) # => "a"
a.at(-1) # => "e"
a.at(5) # => nil
取回某个索引中的元素,倒数第一个索引是-1,第二个是-2。
9. clear
a = [ "a", "b", "c", "d", "e" ]
a.clear # => []
删除数组中的所有元素
10. collect!
a = [ "a", "b", "c", "d" ]
a.collect! {|x| x + "$" } # => ["a$", "b$", "c$", "d$"]
a # => ["a$", "b$", "c$", "d$"]
对数组中的每一个元素进行遍历,block中对元素的操作将改变元素的值。
11. compact
[ "a", nil, "b", nil, "c", nil ].compact # => ["a", "b", "c"]
删除数组中所有值为nil的元素,也即压缩数组。
12. concat
[ "a", "b" ].concat( ["c", "d"] ) # => ["a", "b", "c", "d"]
将第二个数组中的元素添加在第一个数组末尾,组成新数组。
13. count
[1, 2, 3, 4].count(3) # => 1
[1, 2, 3,3, 4].count(3) # => 2
[1, 2, 3, 4].count {|obj| obj > 2 } # => 2
计算数组中等于某个值的元素有几个。
14. delete
a = [ "a", "b", "b", "b", "c" ]
a.delete("b") # => "b"
a # => ["a", "c"]
a.delete("z") # => nil
a.delete("z") { "not found" } # => "not found"
删除数组中值为某个给定值的元素。
15. each
a = [ "a", "b", "c" ]
a.each {|x| print x, " -- " }
result :
a -- b -- c --
遍历数组,打印元素值。
16. each_index
a = [ "a", "b", "c" ]
a.each_index {|x| print x, " -- " }
result :
0 -- 1 -- 2 --
遍历数组,打印索引。
17. empty?
[].empty? # => true
[ 1, 2, 3 ].empty? # => false
判断数组是否为空。
18. join
[ "a", "b", "c" ].join # => "abc"
[ "a", "b", "c" ].join("-") # => "a-b-c"
将数组中的元素连接成字符串。如果给定参数,则在每个元素直接加入该参数。
19. last
[ "w", "x", "y", "z" ].last # => "z"
[ "w", "x", "y", "z" ].last(1) # => ["z"]
[ "w", "x", "y", "z" ].last(3) # => ["x", "y", "z"]
如果不给定参数,取最后一个元素。如果给定参数n,取最后n个参数组成数组。
20. length
[ 1, nil, 3, nil, 5 ].length # => 5
长度。空元素nil也算元素,计算在长度范围内。
21. pop
a = %w{ f r a b j o u s }
a.pop # => "s"
a # => ["f", "r", "a", "b", "j", "o", "u"]
a.pop(3) # => ["j", "o", "u"]
a # => ["f", "r", "a", "b"]
返回删除了最后n个元素后的数组。
22. push
a = [ "a", "b", "c" ]
a.push("d", "e", "f") # => ["a", "b", "c", "d", "e", "f"]
在数组末尾插入元素。
23. replace
a = [ "a", "b", "c", "d", "e" ]
a.replace([ "x", "y", "z" ]) # => ["x", "y", "z"]
a # => ["x", "y", "z"]
用新数组替换旧数组。
24. reverse
[ "a", "b", "c" ].reverse # => ["c", "b", "a"]
[ 1 ].reverse # => [1]
反转数组。
25. shift
args = [ "-m", "-q", "-v", "filename" ]
args.shift # => "-m"
args.shift(2) # => ["-q", "-v"]
args # => ["filename"]
从数组头部删除n个元素,并将他们返回。若删除的是一个,则返回字符串。若删除两个以上元素,则返回这n个组成的新数组。原数组被改变。
26. unshift
a = [ "b", "c", "d" ]
a.unshift("a") # => ["a", "b", "c", "d"]
a.unshift(1, 2) # => [1, 2, "a", "b", "c", "d"]
在头部加入元素,原数组元素往后移。
27. shuffle
[ 1, 2, 3, 4, 5, 1 ].shuffle # => [5, 1, 3, 4, 1, 2]
将原数组随机打乱。
28. sort
a = [ "d", "a", "e", "c", "b" ]
a.sort! # => ["a", "b", "c", "d", "e"]
a # => ["a", "b", "c", "d", "e"]
返回排序好的数组。
29. values_at
a = %w{ a b c d e f }
a.values_at(1, 3, 5) # => ["b", "d", "f"]
a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
a.values_at(-1, -3, -5, -7) # => ["f", "d", "b", nil]
a.values_at(1..3, 2...5) # => ["b", "c", "d", "c", "d", "e"]
一次取回多个索引位置的值。
30. uniq
a = [ "a", "a", "b", "b", "c" ]
a.uniq # => ["a", "b", "c"]
返回数组中不同的元素。原数组不受影响。
Ruby迭代器each、map、collect、inject
说明:
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。
例子:
def debug(arr)
puts '--------'
puts arr
end
h = [1,2,3,4,5]
h1 = h
h1.each{|v|puts sprintf('values is:%s',v)}
h2 = h.collect{|x| [x,x*2]}
debug h2
h3 = h.map{|x| x*3 }
debug h3
h4 = h.inject{|sum,item| sum+item}
debug h4
结果:
values is:1
values is:2
values is:3
values is:4
values is:5
--------
1
2
2
4
3
6
4
8
5
10
--------
3
6
9
12
15
--------
15
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]
arr = [1,2,3]
1) arr2 = arr.each{|element| element = element * 2} #arr与arr2仍然都等于[1,2,3] each返回原数组 遍历内对元素的更改不会保存
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的数组 遍历内对元素的更改不会保存
3) arr2 = arr.map!{|element| element = element * 2} #arr与arr2都等于[2,4,6] map!返回更改后的数组 遍历对元素内的更改会保存
collect 效果等于 map
collect! 效果等于map!
if ($ != jQuery) { $ = jQuery.noConflict(); }
ruby数组操作方法汇总的更多相关文章
- PHP常用数组操作方法汇总
array_change_key_case -- 返回字符串键名全为小写或大写的数组array_chunk -- 将一个数组分割成多个array_combine -- 创建一个数组,用一个数组的值作为 ...
- Ruby数组
Ruby数组是有序的,任何对象的整数索引的集合.每个数组中的元素相关联,并提取到的一个索引.下标与C或Java相似,从0开始.负数索引假设数组末尾,也就是说-1表示最后一个元素的数组索引,-2是数组中 ...
- JQuery radio(单选按钮)操作方法汇总
这篇文章主要介绍了JQuery radio(单选按钮)操作方法汇总,本文讲解了获取选中值.设置选中值.根据Value值设置选中.删除Radio.遍历等内容,需要的朋友可以参考下 随着Jquery的 ...
- jQuery数组处理汇总
jQuery数组处理汇总 有段时间没写什么了, 打算把jquery中的比较常用的数组处理方法汇总一下 $.each(array, [callback])遍历,很常用 1 2 3 4 5 6 7 8 ...
- ECMAScript 6中的数组操作方法
本文介绍ECMAScript 6即将带给我们新的数组操作方法,以及在怎样在现有浏览器应用这些新的数组特性. Note: 我将使用交替使用构造器(constructor)和类(class)两个术语. 类 ...
- PHP数组操作汇总
php 操作数组 (合并,拆分,追加,查找,删除等) - Just Code - ITeye技术网站 PHP操作数组的一些函数介绍 -- 简明现代魔法 PHP数组元素操作实例 -- 简明现代魔法 儿童 ...
- javaScript之数组操作方法(一)
本篇文章主要总结了几个简单的数组操作方法.数组就是一组数据的集合,接下来我们就了解一下几种数组的操作方法. 1. join方法:把数组的所有元素放入一个字符串.举例如下: var arrJoin=[& ...
- 数组操作方法(包括es5)
//push(); 定义:可以可向数组的末尾添加一个或更多元素,并返回新的长度. 方法:push(); 语法:数组.push(新元素1,新元素2,....,新元素x) 返回值:把指定的值添加到数组后的 ...
- 雷林鹏分享:Ruby 数组(Array)
Ruby 数组(Array) Ruby 数组是任何对象的有序的.整数索引的集合.数组中的每个元素都与一个索引相关,并可通过索引进行获取. 数组的索引从 0 开始,这与 C 或 Java 中一样.一个负 ...
随机推荐
- 查询SQL执行情况
/* 查询SQL执行情况 包含逻辑读取信息,执行信息等情况*/ SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total ...
- [洛谷P1272] 重建道路
类型:树形背包 传送门:>Here< 题意:给出一棵树,要求断开$k$条边来分离出一棵有$P$个节点的子树.求最小的$k$ 解题思路 和上一题类型相同,但不那么好做了——分离出的一棵子树肯 ...
- 【BZOJ2333】【SCOI2011】棘手的操作 treap合并
题目大意 有\(n\)个节点,标号从1到\(n\),这\(n\)个节点一开始相互不连通.第\(i\)个节点的初始权值为\(a_i\),接下来有如下一些操作: \(U~x~y\):加一条边,连接第\(x ...
- django-pure-pagination 组件使用
django-pure-pagination 组件 用于在 django 中自动创建分页 官方详见 github : 这里 安装 pip install django-pure-pagination ...
- 【BZOJ 1701】Cow School(斜率优化/动态凸包/分治优化)
原题题解和数据下载 Usaco2007 Jan 题意 小牛参加了n个测试,第i个测试满分是\(p_i\),它的得分是\(t_i\).老师去掉\(t_i/p_i\)最小的d个测试,将剩下的总得分/总满分 ...
- nowcoder提高集训营第5场
凉 (比赛链接)[https://www.nowcoder.com/acm/contest/177#question] T1 (题目链接)[https://www.nowcoder.com/acm/c ...
- 【BZOJ5305】[HAOI2018]苹果树(组合计数)
[BZOJ5305][HAOI2018]苹果树(组合计数) 题面 BZOJ 洛谷 题解 考虑对于每条边计算贡献.每条边的贡献是\(size*(n-size)\). 对于某个点\(u\),如果它有一棵大 ...
- ubuntu “无法获得锁 /var/lib/dpkg/lock -open”
在ubuntu系统终端下,用apt-get install 安装软件的时候,如果在未完成下载的情况下将终端中断,此时 apt-get进程可能没有结束.结果,如果再次运行apt-get install ...
- Windows下使用Diskpart格式化U盘
步骤 进入Diskpartdiskpart 列出所有的磁盘list disk 选择磁盘select disk 清楚clean 创建主分区creat partition parimary 激活当前分区a ...
- 【洛谷P3917】异或序列
题目大意:给定一个长度为 N 的序列,每个位置有一个权值,求 \[\sum\limits_{1\le i\le j\le n}(a_i\oplus a_{i+1}...\oplus a_j)\] 的值 ...