0

这将如何完成?假设我有以下

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()但这让我感到空虚[],我不希望那样,我希望它完全消失。

4

4 回答 4

1

您可以使用delete_if第一个术语并将其与您的论点相匹配:

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

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

(我也将数组作为参数包含在内,因为您的帖子中并不清楚执行上下文)。

于 2013-07-16T22:25:15.993 回答
1

跟进@iamnotmaynard 的建议:

arr.delete_if { |a| a[0] == 'test' }
于 2013-07-16T22:29:15.537 回答
0

assoc.

arr.delete(arr.assoc("test"))
于 2013-07-16T23:26:58.543 回答
0

我有类似的需要删除一个或多个文本模式匹配的 column 。

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]]
于 2016-08-26T21:27:52.500 回答