我有一个数组,它由不同类型的对象组成。但我只想获取字符串实例。我写如下:如何从集合中仅收集字符串实例?
ary = ["11",1,2,"hi",[11]]
ary.select{|e| e.instance_of? String } # => ["11", "hi"]
我要寻找这样的一个优雅的方式,如果有的话。
我有一个数组,它由不同类型的对象组成。但我只想获取字符串实例。我写如下:如何从集合中仅收集字符串实例?
ary = ["11",1,2,"hi",[11]]
ary.select{|e| e.instance_of? String } # => ["11", "hi"]
我要寻找这样的一个优雅的方式,如果有的话。
我会做如下使用Enumerable#grep
:
返回枚举每一个元素的数组,其中模式===元件。如果提供了可选块,则将每个匹配元素传递给它,并将块的结果存储在输出数组中。
ary = ["11",1,2,"hi",[11]]
ary.grep(String) # => ["11", "hi"]
你可能想尝试Object#is_a?方法:
ary = ["11", 1, 2, "hi", [11]]
ary.select{|e| e.is_a? String }
# Output
=> ["11", "hi"]
不能做得比grep
更好,但这里的另一个:
ary.group_by(&:class)[String] # => ["11", "hi"]