我有以下数组:
["--",1,2,3,4]
如何按元素类型从数组中删除元素,即。从数组中删除所有非整数值?
答案 0 :(得分:5)
我做: -
ary = ["--",1,2,3,4]
ary = ary.grep(Integer)
ary # => [1, 2, 3, 4]
注意: - 如果您不想改变原始数组,请使用new_ary
代替ary
。像
new_ary = ary.grep(Integer)
答案 1 :(得分:2)
您可以使用delete_if
从列表中删除项目,但这会修改列表。
a = ["--", 1, 2, 3, 4]
a.delete_if { |n| !n.kind_of?(Fixnum) }
p a
您可以使用select
a = ["--", 1, 2, 3, 4]
b = a.select { |n| n.kind_of?(Fixnum) }
p b
p a
答案 2 :(得分:1)
此解决方案解决标题,而不是示例,并允许按类选择元素,以及按类拒绝元素。
<强>代码强>
good_classes
和bad_classes
是类的数组。
def filter_select(arr, *good_classes)
arr.select { |e| good_classes.include? e.class }
end
def filter_reject(arr, *bad_classes)
arr.reject { |e| bad_classes.include? e.class }
end
<强>实施例强>
arr = [1, :a, {b: 3}, "cat", [4,5], true, 3..4, false]
filter_select(arr, Fixnum, Hash, TrueClass, Range)
#=> [1, {:b=>3}, true, 3..4]
filter_reject(arr, Fixnum, Hash, String, Array)
#=> [:a, true, 3..4, false]
答案 3 :(得分:0)
我会这样做
new_array = ary.reject {|x| x.is_a?(String)}