如何从集合中仅收集字符串实例?

时间:2014-01-09 06:21:34

标签: ruby string

我有一个数组,它包含不同类型的对象。但我想只获得字符串实例。我写的内容如下:

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

我正在寻找一种优雅的方式,如果有的话。

3 个答案:

答案 0 :(得分:10)

我会使用Enumerable#grep执行以下操作:

  

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

不能比grep更好,但这是另一个:

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