2013-07-16 80 views
0

这将如何完成?假设我有以下从ruby中的多维数组中删除数组

arr = [[test, 0, 0, 0], [apples, 0, 9, 8]] 

我知道我会做这样的事情:

def delete_me(item) 
    arr.each do |a| 
     if a[0] == item 
      #delete the array containing test 
     end 
    end 
end 

delete_me('test') 

至于我能看到你只能做:a.remove()但给我留下了一个空[],M I不要那样,我希望它完全消失。

+0

尝试[Array#delete_if](http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-delete_if) – iamnotmaynard

回答

1

您可以使用delete_if和第一项匹配你的说法:

arr = [['test', 0, 0, 0], ['apples', 0, 9, 8]] 

def delete_me(array, term) 
    array.delete_if {|x, *_| x == term } 
end 

(我已经包括了阵列作为参数,以及作为执行上下文不明确从您的文章)。

1

上@ iamnotmaynard的建议跟进:

arr.delete_if { |a| a[0] == 'test' } 
0

assoc

arr.delete(arr.assoc("test")) 
0

我也有类似的需要删除匹配的文本模式的一个或多个列小号

col_to_delete = 'test' 
arr = [['test','apples','pears'],[2,3,5],[3,6,8],[1,3,1]] 
arr.transpose.collect{|a| a if (a[0] != col_to_delete)}.reject(&:nil?).transpose 
=> [["apples", "pears"], [3, 5], [6, 8], [3, 1]]