ToB企服应用市场:ToB评测及商务社交产业平台

标题: Ruby 数组(Array) [打印本页]

作者: 锦通    时间: 前天 23:59
标题: Ruby 数组(Array)
一、参数= 符号赋值数组对象 时,是指向同一个数组对象

eg:
  1. irb(main):019:0> a = []   //定义一个数组
  2. => []
  3. irb(main):020:0> b = a   //将变量a赋值给b,a和b指向同个内存
  4. => []
  5. irb(main):021:0> a.object_id  //a的对象id
  6. => 25204596
  7. irb(main):022:0> b.object_id  //b的对象id
  8. => 25204596
  9. irb(main):023:0> a << 'foo'  //a写入值foo
  10. => ["foo"]
  11. irb(main):024:0> b  // 打印b的值发现和a一样
  12. => ["foo"]
复制代码

二、界说数组的方法
1.[] 界说数组
  1. irb(main):025:0> a = ['1','2']
  2. => ["1", "2"]
复制代码
2.Array.new():括号中可以输入界说数组的长度,和数组的相同值,修改其中一个,其他值都改变,数组的参数都指向同一个对象
  1. irb(main):026:0> Array.new(3)  //定义一个长度为3个的无数据的数组
  2. => [nil, nil, nil]
  3. irb(main):027:0> Array.new(3,"asdf") //定义有3个asdf 字符的数组
  4. => ["asdf", "asdf", "asdf"]
  5. irb(main):028:0> b =Array.new(3,"asdf")//定义有3个asdf 字符的数组并赋值给b
  6. => ["asdf", "asdf", "asdf"]   
  7. irb(main):029:0> b[0]  //b数组的第一参数的值
  8. => "asdf"
  9. irb(main):030:0> b[1]  //b数组的第二参数的值
  10. => "asdf"
  11. irb(main):031:0> b[0].object_id //b数组的第一参数对象的值
  12. => 25986720
  13. irb(main):032:0> b[1].object_id //b数组的第二参数对象的值
  14. => 25986720
  15. irb(main):033:0> b[0][2]='m'  //b数组的第二数据asdf 第三个字符d 改为m
  16. => "m"
  17. irb(main):034:0> b[0]
  18. => "asmf"
  19. irb(main):035:0> b[1]
  20. => "asmf"
  21. irb(main):036:0> b[2]
  22. => "asmf"
复制代码

3.Array.new(){}:创建多个数组,值不一样,修改后不会都修改,可以修改指定值
  1. irb(main):038:0> c = Array.new(2){'abcd'} //定义一个数组大小为2个,值都为abcd 的不同对象
  2. => ["abcd", "abcd"]
  3. irb(main):039:0> c[0]   //查看数组第一个的值
  4. => "abcd"
  5. irb(main):040:0> c[1]  //查看数组第二个的值
  6. => "abcd"
  7. irb(main):041:0> c[0].object_id  //查看数组第一个值的对象id
  8. => 25344288
  9. irb(main):042:0> c[1].object_id //查看数组第二个值的对象id
  10. => 25344276
  11. irb(main):043:0> c[1][2]='k'  //查看数组第二个值的字符串的第三个字符设置为k
  12. => "k"
  13. irb(main):044:0> c[0]  //查看数组第一个的值
  14. => "abcd"
  15. irb(main):045:0> c[1]  //查看数组第二个的值,可以看到只有第二个值改变了
  16. => "abkd"
复制代码
3. %w(): 简朴快速的界说数组,不必要输入单引号和逗号
  1. irb(main):046:0> arr = %w(aa bb cc dd)
  2. => ["aa", "bb", "cc", "dd"]
复制代码
三、数组的方法
1.[]:查看第几个数据
  1. irb(main):048:0> a = %w(foo bar wut wat) //定义数组
  2. => ["foo", "bar", "wut", "wat"]
  3. irb(main):049:0> a[0] //获取数组的第一个数据
  4. => "foo"
复制代码
2.[..]:查看区间数据
  1. irb(main):050:0> a[-1] //获取最后一个
  2. => "wat"
  3. irb(main):051:0> a[1..2]
  4. => ["bar", "wut"]
复制代码
3.fetch():安全的取数据,可以界说取不到数据的情况
  1. irb(main):052:0> a.fetch(2)
  2. => "wut"
  3. irb(main):053:0> a.fetch(4)
  4. IndexError: index 4 outside of array bounds: -4...4
  5.         from (irb):53:in `fetch'
  6.         from (irb):53
  7.         from D:/RailsInstaller/Ruby2.2.0/bin/irb:11:in `<main>'
  8. irb(main):054:0> a.fetch(4,'asdf')
  9. => "asdf"
复制代码
4.length
  1. irb(main):055:0> a.length
  2. => 4
复制代码
5.include?():数组是否包罗哪些字符
  1. irb(main):057:0> a.include?('foo')
  2. => true
  3. irb(main):058:0> a.include?('aa')
  4. => false
复制代码
6.empty?(): 是否为空数组
  1. irb(main):059:0> a.empty?()
  2. => false
复制代码
7.push():往数组后添加数据,也可以添加相同值
  1. irb(main):060:0> a.push('haha')
  2. => ["foo", "bar", "wut", "wat", "haha"]
复制代码
8.[]=:数组指定位置添加数据,如果中心没有数据,会创建空数据
  1. irb(main):061:0> a[10]='aab'
  2. => "aab"
  3. irb(main):062:0> a
  4. => ["foo", "bar", "wut", "wat", "haha", nil, nil, nil, nil, nil, "aab"]
复制代码
9.delete_at():删除指定位置的值
  1. irb(main):062:0> a
  2. => ["foo", "bar", "wut", "wat", "haha", nil, nil, nil, nil, nil, "aab"]
  3. irb(main):063:0> a.delete_at(0)
  4. => "foo"
  5. irb(main):064:0> a
  6. => ["bar", "wut", "wat", "haha", nil, nil, nil, nil, nil, "aab"]
复制代码
10.delete():删除指定内容的值
  1. irb(main):064:0> a
  2. => ["bar", "wut", "wat", "haha", nil, nil, nil, nil, nil, "aab"]
  3. irb(main):065:0> a.delete('haha')
  4. => "haha"
  5. irb(main):066:0> a
  6. => ["bar", "wut", "wat", nil, nil, nil, nil, nil, "aab"]
复制代码
11.uniq!: 相同值删除,保存其中一个,不加感叹号
  1. irb(main):067:0> a.push('bar')
  2. => ["bar", "wut", "wat", nil, nil, nil, nil, nil, "aab", "bar"]
  3. irb(main):068:0> a.uniq()
  4. => ["bar", "wut", "wat", nil, "aab"]
复制代码
12.shuffe: 将数组数据随机排序
  1. irb(main):072:0> a.shuffle
  2. => ["bar", "wut", "aab", "wat", nil]
  3. irb(main):073:0> a
  4. => ["bar", "wut", "wat", nil, "aab"]
复制代码
13.falttern:二维数组转为1维数组
  1. irb(main):001:0> a=[[1,2,34],['a','b','c']]  //创建二维数组
  2. => [[1, 2, 34], ["a", "b", "c"]]
  3. irb(main):002:0> a.flatten  //将二维数组转为一维数组
  4. => [1, 2, 34, "a", "b", "c"]
复制代码
四、遍历数组
1.each{}:遍历数组
  1. irb(main):004:0> arr=['a','b','c','d'] //创建arr数组
  2. => ["a", "b", "c", "d"]
  3. irb(main):006:0> arr.each{|e| p e} //遍历打印数组,eg |e|为变量e  p为打印的意思 e为变量
  4. "a"
  5. "b"
  6. "c"
  7. "d"
  8. => ["a", "b", "c", "d"]
复制代码
2.reverse_each{}: 倒序遍历数组
  1. irb(main):004:0> arr=['a','b','c','d']
  2. => ["a", "b", "c", "d"]
  3. irb(main):007:0> arr.reverse_each{|e| p e} //倒序打印arr数组
  4. "d"
  5. "c"
  6. "b"
  7. "a"
  8. => ["a", "b", "c", "d"]
复制代码
3.each_with_index: 下标遍历数组
  1. irb(main):001:0> arr=['a','b','c','d']
  2. => ["a", "b", "c", "d"]
  3. irb(main):002:0> arr.each_with_index{|e,i| p [e,i]}   //定义e和i变量,e为数组数据,i为数组的下标
  4. ["a", 0]
  5. ["b", 1]
  6. ["c", 2]
  7. ["d", 3]
  8. => ["a", "b", "c", "d"]
复制代码

4.sort:数组数据从小到大排序
  1. irb(main):003:0> arr=[-1,-2,-4,0,99,-2,8]
  2. => [-1, -2, -4, 0, 99, -2, 8]
  3. irb(main):004:0> arr.sort
  4. => [-4, -2, -2, -1, 0, 8, 99]
复制代码
5.select{}:遍历判定数组的值
  1. irb(main):003:0> arr=[-1,-2,-4,0,99,-2,8]
  2. => [-1, -2, -4, 0, 99, -2, 8]
  3. irb(main):005:0> arr.select{|e| e>0}  //数组元素大于0的数据
  4. => [99, 8]
复制代码
6.compact: 删除数组里面空元素
  1. irb(main):006:0> arr<< nil
  2. => [-1, -2, -4, 0, 99, -2, 8, nil]
  3. irb(main):007:0> arr.compact  //删除nil 空白元素,ps要想对arr生效,可以用危险!eg:arr.compact!
  4. => [-1, -2, -4, 0, 99, -2, 8]
  5. irb(main):008:0> arr
  6. => [-1, -2, -4, 0, 99, -2, 8, nil]
  7. irb(main):009:0> arr.compact!
  8. => [-1, -2, -4, 0, 99, -2, 8]
  9. irb(main):010:0> arr
  10. => [-1, -2, -4, 0, 99, -2, 8]
复制代码
7.any?{}: 是否含有{条件}。eg:是否含有小于 零的数
  1. irb(main):010:0> arr
  2. => [-1, -2, -4, 0, 99, -2, 8]
  3. irb(main):011:0> arr.any?{|e| e<0}  //数组是否含有小于0的元素
  4. => true
复制代码
更多array利用:https://ruby-doc.org//core-2.2.0/Array.html
课后训练
输入:input=[1,2,3]  输出:output = [2,4,6]
要求:
不能改变原input
output 是一个新的array object
尽量简便
  1. output= []
  2. input.each{|e| output << e*2}
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4