当前位置: 代码迷 >> Ruby/Rails >> ruby数组跟哈希学习笔记
  详细解决方案

ruby数组跟哈希学习笔记

热度:90   发布时间:2016-04-29 02:20:52.0
ruby数组和哈希学习笔记

一.数组

1.数组的定义

?

a = Array.new     #定义一个数组ab = Array.new(5)   #定义一个含5个nil元素的数组c = Array.new(5,1)     #定义一个含5个1元素的数组d = []        #定义一个空数组d

?

2.数组的运算

?

<< :追加元素

+ :串联方法

- :数组差集

& :数组交集

| :数组并集

* :重复数组,如果*后面是整数,则返回重复整数次的数组,如果是字符串,则返回重复使用该字符串连接数组。

?

[1,2] << 3       #[1,2,3][1,2] + [1,2]    #[1,2,1,2][1,2,3] - [3,4]     #[1,2][1,2,3] & [3,4]    #[3][1,2,3] | [3,4]     #[1,2,3,4][1,2] * 2     #[1,2,1,2,1,2][1,2] * '--'    #1--2

?

3.数组常用方法

?

a = [1,2,3,4,5,6]a[1]    #2a[0,2]   #[1,2,3]a[0..2]   #[1,2,3]a[-2,2]   #[5,6]a[2] = 7    #数组变成[1,2,7,4,5,6]a[0,2] = [8,9,10]    #数组变成[8,9,10,4,5,6]

?

数组具有所有Enumerable模块所提供的方法:

?

a = [1,2,3,4,5]a.find_all{|i| i%2==0}     #[2,4]a.max     #5a.include?(5)       #truea.inject{|sum,i| sum + i}     #15

?

其他的方法:

?

ary.size或ary.length:返回数组的大小(长度);

ary.concat(other_array):将other_array的元素附加到ary中;

ary.clear:清空数组;

ary.delete(obj):删除数组中与obj相等的元素,如果找到则返回obj,否则返回nil;

ary.delete_at(index):删除指定下标处的元素;

ary.delete_if{|item| block}:删除指定条件的元素;

ary.first和ary.last:返回数组的第一个元素/最后一个元素;

ary.compact:返回一个数组的副本,并删除其中的nil元素;

ary.flattern:如果ary中包含的元素为数组,将不断递归合并,返回一个值包含基本元素的数组;

?

[1,[2,3],[4,[5,6]],7].flattern     #[1,2,3,4,5,6,7]

?

ary.index(obj):返回数组中第一个等于obj元素的下标;

ary.insert(index,obj):在指定位置插入对象到数组中;

ary.join(separator):合并数组为一个字符串,类似与“*”;

ary.pop和ary.shift:删除数组中最后一个元素/第一个元素;

ary.push(obj):类似于<<方法,将obj添加到数组中;

ary.replace(other_array):使用other_array替换掉ary中的内容;

ary.reverse:返回一个数组反序ary中的元素。

?

?

二.散列Hash

?

1.定义Hash

?

h = Hash.newh = Hash[1=> 'a',2=> 'b']h = {a=> '1',b=> '2'}

?

2.取值赋值

?

h = {1=> 'a','2'=> 'b'}h[1]      #ah['2']     #bh[2]      #nilh['2'] = 'c'h['a'] = 'd'h       #{1=> 'a','2'=> 'c','a'=>'d'}

?

3.Hash常用方法

?

hsh.clear:清空Hash

hsh.delete(key):删除Hash中键key的项;

hsh.delete_if{|key,value| block}:根据指定条件删除元素;

hsh.has_key?(key):判断Hash中是否包含给定的键key;

hshhsh.has_value?(value):判断Hash中是否包含给定的值value;

hsh.index(value):返回Hash中值为value的键,如果有多个只返回第一个,没有返回nil;

hsh.invert:返回逆转Hash的键和值的新Hash;

hsh.keys:返回Hash的键组成的数组;

hsh.values:返回Hash的值组成的数组;

hsh.values_at(keys):返回给定键对应的值组成的数组;

?

a = {1=>'a',2=>'b'}a.values_at(1,2,3)       #  ['a','b',nil]

?

hsh.length:返回Hash中元素的个数;

hsh.merge(other_hash):合并两个Hash,重复的键,other_hash的对应值将hsh的值覆盖;

hsh.replace(other_hash):使用other_hash中的值替换hsh中相同键的值;

hsh.to_a:将Hash转换为数组。

?

4.查找和迭代

?

hsh = {'a'=>2,'b'=>1,'c'=>3}hsh.find_all{|key,value| value>1}     #[['c',13],['a',2]]hsh.max     #返回值最大的元素hsh.sort_by{|key,value| key}     #按键排序hsh.sort_by{|key,value| value}   #按值排序

?

?