术:4个ruby小技巧

2019-10-26  本文已影响0人  稻草人_b788

一、4个ruby小技巧

(一)nil转数组

有时候对于nil对象,我们希望转成数组来处理,这样进行each循环时便不会报错。
nil转数组可以用三种方法:
1.使用Array()方法

Array(nil)
=> [nil]

2.使用to_a方法

nil.to_a
=> []

3.使用[*]方式将对象转成数组

[*nil]
=> []

[*1]
=> [1]

[*1..5]
=> [1, 2, 3, 4, 5]

补充说明:
使用[*]和Array都有一个好处,就是可以把单个对象和数组用同样的方式进行操作,此外这两种方式还可以对各种集合类型、hash以及range进行操作:

a = 1 #单对象
b = [1,2,nil] #数组

[*a] #*操作单对象
 => [1]

[*b] #*操作数组
 => [1, 2, nil]

Array(a) #Array操作单对象
=> [1]

Array(b)  #Array操作数组
 => [1, 2, nil]

[*'a'..'e'] #*操作range
=> ["a", "b", "c", "d", "e"]

Array(1..5) #Array操作range
=> [1,2,3,4,5]

Array({k: 1})
 => [[:k, 1]]

[*{k: 1}]
 => [[:k, 1]]

{k: 1}.to_a
=> [[:k, 1]]

(二)使用Hash方法接收参数构建散列

使用Hash方法并传入参数可以构建散列,传入的参数必须是偶数个,如果传入的参数是奇数个则会报错
按照顺序每两个参数将构成一个键值对,第一个参数作为key,第二个参数作为value。
例如:

h = Hash["a","b"]
=> {"a" => "b"}

m = Hash["a","b",:c,"d"]
=> {"a"=>"b", :c=>"d"}

拓展运用
假如这里有一个文件,其中的内容有姓名和国家,但它不是ruby能直接识别的数据结构,我们要把它先转成ruby能识别的数据结构,然后将其中的姓名和国家和相应的人员做成散列形式:

line = "first_name=david;last_name=black;country=usa" #文件的原始内容
record = line.split(/=|;/) #将内容按照=或;进行分割
=> ["first_name", "david","last_name","black","country","usa"]

再将上述的数据进行进一步加工,转成散列形式:

data = []
element = Hash[*record] #使用*将上面获取的数组转成裸列表,作为参数传给Hash方法,从而构建散列
=> {"first_name"=>"david", "last_name"=>"black", "country"=>"usa"}
data.push(element)
=>[{"first_name"=>"david", "last_name"=>"black", "country"=>"usa"}]

(三)使用双星**接收hash格式的参数

在方法的参数列表中,单星*表示将参数作为数组来接收,而双星**则表示将参数作为hash散列来接收
例如:

def hello(a,*b,**c)
    p a,b,c
end
hello(1,2,3,a: 1,b:2)
 #1 参数a的值
 #[2, 3] 参数b的值
 #{:a=>1, :b=>2} 参数c的值
 => [1, [2, 3], {:a=>1, :b=>2}]

(四)数组转参数列表

数组可以通过前面加上星号*转成参数列表
例如:

a = [1,2]
def count_num(x,y)
    return x + y
end

count_num(*a) #将数组a转成了参数列表,分别赋值给了x和y
=> 3

二、其他ruby小技巧

相关资料:10 个 Ruby 技巧提升你的代码–ruby china

上一篇 下一篇

猜你喜欢

热点阅读