Ruby数组的各种使用
1. 如何创建数组? 最简单的,x=[]将创建一个空数组: irb(main):004:0> x = [] 另外还可以使用标准的new方法,任何数组都是Array类的实例。 irb(main):001:0> x = Array.new 上述第一个创建空数组,第二个创建预设SIZE的数组,第三个创建预设SIZE和值的数组。 跟Hash一样,第三种方法填充的预设值,都指向同一个目标。 任何一个位置的目标改变了,都影响所有元素的值: irb(main):005:0> x = Array.new(3,"a") 创建的数组,每个元素都是唯一目标,要这样做: irb(main):008:0> x = Array.new(3) do |e| e = "a" end 当然还可以如下创建数组: irb(main):012:0> x = Array.[](1,2,3) 不过很少使用,不如x=[1,2,3]来的简洁方便。 2. 如何访问数组? 使用数组下标: irb(main):014:0> x = [3,2,1,4] 0表示第一个元素,-1表示最后一个元素,其他类推。 还有first和last方法: irb(main):017:0> x.first first和last可以带一个整数参数,表示返回首尾多少个元素。 遍历数组使用each方法: irb(main):024:0> x.each do |s| puts s end 3. 数组的slice? 数组的slice可以对数组切片,返回指定位置和长度的片段。 irb(main):021:0> x[0,2] 第一个表述从0位置开始切片,长度为2,返回2个元素。 第二个表示从0位置开始切片,到2位置结束,返回3个元素。 第三个表示从0位置开始切片,到2位置结束,但是不包括最后一位,返回2个元素。 4. 如何修改数组? 数组有push和<<方法,表示添加元素到数组尾部: irb(main):024:0> x = [3,2,1,4] pop方法表示从尾部删除元素,shift表示从首部删除元素: irb(main):027:0> x.pop 对应的有unshift方法,表示从首部添加元素: irb(main):029:0> x.unshift(0) 数组的insert方法可以在指定位置插入元素: irb(main):053:0> x 当然delete和delete_at方法可以删除对应的元素。 delete_at的参数是数组索引: irb(main):021:0> x.delete_at(1) 5. 数组的加减操作? ruby很灵活,任何目标都可以定义自己的方法。 数组就定义了加减方法(当然还有乘除,不过很少使用)。 irb(main):031:0* x = [1,2,3] 所谓加就是把两个数组合并起来,所谓减就是把相同的元素排除掉。 而且这个减似乎不在意元素顺序: irb(main):043:0> x 6. 求唯一数组? 在ruby里这个很方便,用uniq方法: irb(main):046:0> x = [1,2,3,3,2,1] 当然x.uniq!这样加个叹号,表示毁坏性方法,不返回而是直接改变x目标自身。 7. 数组的比较? 可以直接用==进行比较: irb(main):048:0> x = [1,2,3] 8. 数组的类型转换? 数组可以转换成串,使用to_s或者join方法: irb(main):001:0> x=[1,2,3,4] 串也可以转换成数组: irb(main):012:0> str="1 2 3 4" 这可能不是你想要的,那么执行: irb(main):018:0> str.split(/ /).map {|s| s.to_i} Hash可以直接转换成二维数组: irb(main):010:0> hash={1=>2,3=>4} 数组可以转换成hash,见我前一篇帖子。 9. 如何查找数组元素? irb(main):034:0> x = [3,2,1,4,4] include?判断是否包含该元素,返回true或false。 find找出符合条件的一个元素,返回该元素。 select找出符合条件的所有元素,返回结果也是数组。 10. 数组的排序? 使用sort: irb(main):049:0> x = [3,1,4,0,1] 还有sort_by方法,接受一个block作为参数,按照指定规则进行排序。 11. 其他实用数组方法? 展开数组: irb(main):025:0> x = [1,2,3,[0,1,2]] 清空数组: irb(main):027:0> x.clear 替换数组: irb(main):028:0> x.replace [3,2,1] 合并数组: irb(main):030:0> x.concat [1,2,3] 12. 数组的inject方法? irb(main):044:0> x = [1,2,3,4] inject的参数0表示初始化sum,item表示遍历每一个元素,在block里不断自加,最后返回累计加值。 irb(main):047:0> x.inject([]){|new, item| new << -item} 上述inject作用,表示取数组的每个元素的负值,返回一个新数组。当然用map更简洁: irb(main):048:0> x.map {|item| -item} map的item也表示遍历数组元素,对元素进行计算后,返回一个结果数组。 |
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C++类指针初始化
- 下一篇: mysql服务器cpu爆满解决办法