1. 数组的定义
数组是许多指向对象的引用按顺序排列的数据结构。
数组中保存的是”指向对象的引用“,而不是对象本身。
2. 数组的创建
例1
a = 1
b = "str"
#数组不一定都是同一类型 c = [a, b, 3 , "abcdef" ] #=> [1, "str", 3, "abcdef"]
#数组可以嵌套使用 d = [a, c, [ 1 , 2 , 3 ]] #=> [1,[1, "str", 3, "abcdef"], [1, 2, 3]]
|
3. 数组的索引
数组的各个元素按顺序被赋予了从0开始的编号,可使用这些编号和索引运算符[]对访问对象进行操作。
例2
p c[ 0 ]
p c[ 1 ]
p c[ 2 ]
p c[ 3 ]
#如果访问的索引值指向的元素不存在,则返回nil<br>p c[4] p d[ 2 ]
#输出结果 #1 #"str" #3 #"abcdef" #nil #[1, 2, 3] |
负索引
负索引的存在,在Ruby中非常具有代表性。
Ruby中的数组对象的索引值是负数,是从末尾开始反向的编号所表示的元素。
数组的最后一个元素的编号是-1,在它前面的一个元素编号则是-2。
例3
p c[- 1 ]
p c[- 2 ]
#比最前面的元素还要前面,在数组范围之外 p c[- 5 ]
#输出结果 #abcdef #3 #nil |
带有长度的索引
例4
p c[ 1 , 2 ]
p c[ 1 , 3 ]
p c[ 1 , 4 ]
#利用负索引进行访问倒数两个索引值指向的元素<br>p c[-2,2] #对范围外进行访问<br>p c[4,2] #输出结果 #["str", 3] #["str", 3, "abcdef"] #["str", 3, "abcdef"] #[3, "abcdef"] #[] |
表示范围的索引
..表示包含末端的范围
...表示不包含末端的范围
例5
#包含末端的范围 p c[ 0 .. 1 ]
#不包含末端的范围 p c[ 0 ... 1 ]
p c[- 2 ..- 1 ]
#负索引组合,-2表示倒数编号,3表示正数编号 p c[- 2 .. 3 ]
p c[- 2 ... 3 ]
p c[ 4 .. 5 ]
#输出结果 [ 1 , "str" ]
[ 1 ]
[ 3 , "abcdef" ]
[ 3 , "abcdef" ]
[ 3 ]
[] |
索引赋值
使用索引值可以对数组的内容进行替换。
例6
a = [ 1 , 2 ]
p a a[ 0 ] = 3
p a #能够对超过数组长度的位置进行赋值,此时数组会被自动延长,空白索引部分用nil填充 a[ 4 ] = "4"
p a a[ 0 , 3 ] = 'a' , 'b' , 'c'
p a #当指定的元素个数比原数组的元素个数多时,数组会被加长并代入 a[ 0 , 3 ] = 'a' , 'b' , 'c' , 'd'
p a a[ 1 .. 2 ] = 1 , 2
p a a[ 0 , 2 ] = "?"
p a a[ 0 .. 2 ] = "A"
p a a[- 1 ] = "Z"
p a #输出结果 #[1, 2] #[3, 2] #[3, 2, nil, nil, "4"] #["a", "b", "c", nil, "4"] #["a", "b", "c", "d", nil, "4"] #["a", 1, 2, "d", nil, "4"] #["?", 2, "d", nil, "4"] #["A", nil, "4"] #["A", nil, "Z"] |
4. 数组的比较
例7
array1 = [ 1 , 2 , "str" ]
array2 = [ 1 , 2 , "str" ]
p array1 === array2 #=>true
array = [ "str" , 1 , 2 ]
p array === [ 1 , 2 , "str" , "extra" ] #=>false
|
5. 数组的各种各样的方法
例8
array = [ "a" , "b" , "c" ]
#输出数组的长度 p array.length #输出数组的元素个数(即长度) p array.size #array的元素copy p array *= 2
#是否包含c p array.include? "c"
#对数组进行排序,生成新的数组,并不改变原来的array数组 p array.sort p array #消除重复元素,并不改变原来的array数组 p array.uniq p array #消除重复元素,并更新原来的array数组 array.uniq! p array #输出结果<br>#3 #3 #["a", "b", "c", "a", "b", "c"] #true #["a", "a", "b", "b", "c", "c"] #["a", "b", "c", "a", "b", "c"] #["a", "b", "c"] #["a", "b", "c", "a", "b", "c"] #["a", "b", "c"] |
6. 带有代码块的方法和迭代
对带有代码块的方法的调用进行编程时可以用do ... end 与 花括号{}。 do ... end 和花括号{}的区别仅仅在于结合强度而已。
数组对象拥有很多带有代码块的方法,其中很多事对反复操作的抽象化,成为迭代方法。其中最具代表性的是each。
例9
array = [ "a" , "b" , "c" ]
<strong>array. each do |item|</strong>
print item + ""
end #输出结果 #abc |
7. 带有序数的反复操作
each_with_index是each的一种变体,能够同时获取数组元素和其索引值
例10
array = [ "a" , "b" , "c" ]
array.each_with_index do |item, index|
p [item, index]
end #输出结果 #["a", 0] #["b", 1] #["c", 2] |
映射(Map)
例11-1
acids = [ "Adenin" , "Thymine" , "Guanine" , "Cytosine" ]
sign = acids.map{|acid| acid[ 0 , 1 ]}
p sign #输出结果 [ "A" , "T" , "G" , "C" ]
|
例11-2
acids = [ "Adenin" , "Thymine" , "Guanine" , "Cytosine" ]
#对acids内的元素分别进行小写转为大写,a为临时变量 sign = acids.map{|a| a.upcase} p sign #输出结果 #["ADENIN", "THYMINE", "GUANINE", "CYTOSINE"] |
8. 排序
例12
array = [ "73" , "2" , "5" , "1999" , "53" ]
#按照默认的字符串排序 p array.sort #转化为数值后排序 p array.sort{|x,y| x.to_i <=> y.to_i} #输出结果 #["1999", "2", "5", "53", "73"] #["2", "5", "53", "73", "1999"] |
9. 选择
将代码块中的返回值为真的元素取出,组成新的数组并返回
例:students.select{|person| person.grade == 3}
相关推荐
《Ruby Mind Map——深入理解Ruby编程思想》 Ruby是一种面向对象的、动态的、灵活的编程语言,由日本人松本行弘(Yukihiro Matsumoto)于1993年设计并开发。Ruby以其简洁的语法、强大的元编程能力和对开发者友好而...
总的来说,RubyInstaller是Windows用户入门Ruby编程的重要桥梁,它简化了环境配置,使得开发者可以专注于编写代码,而非操作系统级别的设置。无论是选择2.6.1还是2.5.0,都可以享受到Ruby语言的灵活性和强大功能。...
编写第一个Java程序通常是“Hello World”示例,这是学习任何编程语言时的一个传统入门程序。通过这个简单的程序,可以了解Java的基本语法结构。 #### 四、JAVA关键字 Java中有许多保留的关键字,它们具有特殊的...
- **第10章:数组变得简单**:介绍数组操作的基础知识。 - **第11章:回到浏览器**:讨论浏览器环境下的开发实践。 - **第四部分:高级主题**(Advanced Topics) - **第12章:Prototype和Scriptaculous的实际...
标题“MongoDB Document”直接指向了MongoDB的核心概念之一——文档。 #### 描述:MongoDB Develop Document **描述**部分提到的是“MongoDB开发文档”,这表明文档主要面向开发者群体,旨在为他们提供深入理解...
此外,还提供Python、Ruby、MATLAB等其他语言的接口。 - **设计目标**:OpenCV的设计重点在于执行速度尽可能快,特别适用于实时应用。 - **性能优化**:通过优化的C代码以及对多核处理器的支持来提高性能。对于Intel...