ruby学习笔记(6)-Array的使用

ruby的数组基本使用,跟c#中的数组比起来,最不习惯的区别在于允许负索引(跟javascript到有几分相似)

arr=[3,4,5,6,7,8,9]

puts arr[0]  # 3
puts arr.first  # 3
puts arr[arr.length-1] # 9
puts arr[arr.size-1] # 9
puts arr.last  #9
puts arr[-1] #9,下标为-1,即相当于取最后一个元素
puts arr[-2] #8,倒着取第二个数
print arr[1..3]   ,"\n" #456,取下标从1到3的元素
print arr[-3,2]   ,"\n" #倒数第三个元素开始,连续取2个元素,即7,8

复杂一点的应用如下,这里要特意指出的是,ruby中的数组天生就已经实现了堆栈与队列,这一点想得很周到.

#来自"Ruby语言入门教程v1.0"中的E8.1-3.rb

arr=[4,5,6]
print arr.join(", "),"\n" # 4, 5, 6

arr[4] = "m" #将第5个元素赋值为m
print arr.join(", "),"\n" #第4个元素因为没赋值,所以为空,输出结果为4, 5, 6, , m
print arr[3] ,"\n" #第4个元素为空,所以输出nil

arr.delete_at(3) #删除第4个元素
print arr.join(", "),"\n" #输出 4, 5, 6, m

arr[2] = ["a","b","c"]  #将第3个元素"6",重新赋值为一维数组[a, b, c]

puts arr[0] # 4
puts arr[1] # 5
puts arr[2] # a,b,c 注意:用puts输出时,会自动把每个元素添加\n
puts arr[3] # m

print arr.join(", "),"\n" # 4, 5, a, b, c, m
print arr[2] ,"\n" # abc

arr[0..1] = [7,"h","b"]  #将前面二个元素4,5换成7,h,b
print arr.join(", "),"\n" # 7, h, b, a, b, c, m

arr.push("b" )  #将b压入数组尾部
print arr.join(", "),"\n"# 7, h, b, a, b, c, m, b

arr.delete(["a","b","c"] )  #删除数组中匹配["a","b","c"]的元素,即arr[2],注意前面的arr[2] = ["a","b","c"] 
print arr.join(", "),"\n" # 7, h, b, m, b

arr.delete("b")  #将所有b元素删除
print arr.join(", "),"\n" # 7, h, m

arr.insert(2,"d") # 在第3个元素处插入d,如果后面还有元素,则索引后移
print arr.join(", "),"\n" #7, h, d, m

arr<<"f"<<2  #将元素f,2加入到数组最后,类似前面的push用法
print arr.join(", "),"\n" # 7, h, d, m, f, 2
arr.pop #弹出一个元素,与前面的push结合起来,ruby中的数组本身就是一个堆栈
print arr.join(", "),"\n" #7, h, d, m, f
arr.shift #元素左移一位,即实现了队列
print arr.join(", "),"\n" #h, d, m, f

arr.clear #清空元素
print arr.join(", "),"\n"

最后讲一个要注意的地方:array的each与delete一起用时,有时候会出现意想不到的效果!

#
arr = [1,[2,3],2,3,4,5,6]
print arr.join(","),"\n" #1,2,3,2,3,4,5,6

arr.delete([2,3])
print arr.join(","),"\n" #1,2,3,4,5,6

arr.each{|x| arr.delete(x)};
print arr.join(","),"\n" #2,4,6 注意这里:array对象each,delete一起使用时,使用不当会把自身的"部分"元素给删除掉
时间: 2024-09-22 20:02:48

ruby学习笔记(6)-Array的使用的相关文章

ruby学习笔记(11)--symbol与hash参数

symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001".object_id puts "0001".object_id puts "0001".object_id puts "0001".object_id 输出结果类似如下: 32088750320887303208871032088690 可以

Ruby学习笔记_索引贴

学习Ruby也有段时间了,在学习的同时也做了些笔记并发到了园子睐.看到园子里的大虾们在出了一系列文章后都会做个索引贴,这样很方便,所以本人今天抽了个空就把它整理了下,方便自己的同时也方便感兴趣的朋友.   Ruby学习笔记目录: 1.Ruby入门 2.Ruby-循环与选择结构 3.Ruby-String 4.Ruby-Array 5.Ruby-Hash 6.Ruby-Block, Proc and Lambda 7.Ruby-正则表达式 8.Ruby-Symbol 9.Ruby-Method,C

Ruby学习笔记二 使用Ruby实现通过Proxy的方式请求网页

现在很多网站上某些活动都有限制同一IP只能投一票的规定,但是有时候迫于 压迫,又不得不想办法多投几票,以前是采用Apache里的HttpClient来实现这些功 能,日前正在看Ruby,就用它也来玩下: require 'net/http' ##获得网页内容 def query_url(url) return Net::HTTP.get(URI.parse(url)); end #抓取cnproxy上所有的代理列表,并将结果保存到proxy.txt中去 #你可以修改这块代码或者其他的代理服务器列

ruby学习笔记(3)--语法层面的先见之明

看了几天ruby,发现c#中很多一直被称道的语法特性,ruby早在几年前就有了:  1.c#中的params关键字 class Program { static void Main(string[] args) { Console.WriteLine(Sum()); Console.WriteLine(Sum(3,6)); Console.Read(); } static int Sum(params int[] nums) { int _result = 0; foreach (int ite

ruby学习笔记(1)--初识语法

虽然ruby/ruby on rails从2007年就一直获奖无数,但身为一个中国人,一直对小日本创造的东西不怎么感兴趣,想想其实也没必要,技术本身是无国界的,日本其实也有值得学习的地方(扯远了,呵) 单从技术而言,ruby本身确实很爽,令程序员的工作变得轻松有趣! 下面的代码演示了如何找出100以内的素数: using System; namespace Mersenne { class Program { static void Main(string[] args) { for (int

ruby学习笔记(2)--类的基本使用

ruby语言跟c#的一些重要差别在于: 1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此) 2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型.(可以通过 "puts 变量.class"查看) 3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的! ...其

Ruby学习笔记之Ruby 对象

大部分 Ruby 程序,它们的设计,逻辑,动作,都是围绕着对象进行的.写一个 Ruby 程序,主要的工作就是去创建对象,然后给它们能力,让它们可以去执行动作. Ruby 是 OOP 语言,就是面向对象的语言,你执行的计算,数据处理,输入与输出这些动作,都是通过创建对象,然后让这个对象去执行指定的动作来完成的.对象(object)在现实世界里,就是一个东西.一个苹果是一个对象,一张桌子也是一个对象. 每个对象是一个特定的类的实例(instance),对象的行为大部分是在它们所属的那个类上面定义的方

Ruby学习笔记之Ruby 模块

介绍一种跟类相似的构造:模块(module).在设计程序的时候,我们会把大的组件分割成小块,你可以混合与匹配对象的行为. 跟类差不多,模块也捆绑方法与常量.不一样的是,模块没有实例.你可以把拥有特定功能的模块放到类或某个特定的对象里使用. Class 这个类是 Module 类的一个子类,也就是所有的 class 对象应该也是一个 module 对象. 上午10:26 *** 创建与使用模块 上午10:26 *** module MyFirstModule   def say_hello   p

Ruby学习笔记

Ruby语言中,以对象为基本单位,可以说所有的元素都是对象.按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序.对象由类来定义,具体的表现为对象实例.也就是说,对象是类的实例化[2]. Ruby语言的基础元素 对象:数值对象.字符串对象.正则表达式对象.时间对象.文件对象.目录对象.数组.哈希.例外对象等 数值对象      由于Ruby中一切数据都是对象,所以我们处理的数字实际上也是对象.      a = 10,这样一个简单的赋值语句,实际上应当理解为 a = Num