2014-01-09 27 views
1

我有一个数组,它由不同类型的对象组成。但我只想获取字符串实例。我写如下:如何从集合中仅收集字符串实例?

ary = ["11",1,2,"hi",[11]] 
ary.select{|e| e.instance_of? String } # => ["11", "hi"] 

我要寻找这样的一个优雅的方式,如果有的话。

回答

10

我会做如下使用Enumerable#grep

返回枚举每一个元素的数组,其中模式===元件。如果提供了可选块,则将每个匹配元素传递给它,并将块的结果存储在输出数组中。

ary = ["11",1,2,"hi",[11]] 
ary.grep(String) # => ["11", "hi"] 
1

你可能想尝试Object#is_a?方法:

ary = ["11", 1, 2, "hi", [11]] 
ary.select{|e| e.is_a? String } 

# Output 
=> ["11", "hi"] 
1

不能做得比grep更好,但这里的另一个:

ary.group_by(&:class)[String] # => ["11", "hi"]