按类型从数组中删除元素

时间:2014-04-23 16:30:56

标签: ruby

我有以下数组:

["--",1,2,3,4]

如何按元素类型从数组中删除元素,即。从数组中删除所有非整数值?

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_classesbad_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)}

相关问题