我有一个数组,它包含不同类型的对象。但我想只获得字符串实例。我写的内容如下:
ary = ["11",1,2,"hi",[11]]
ary.select{|e| e.instance_of? String } # => ["11", "hi"]
我正在寻找一种优雅的方式,如果有的话。
答案 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"]