Ruby:删除前导“零”的2D数组行

时间:2014-05-23 19:35:49

标签: ruby arrays multidimensional-array

我是Ruby语言的新手,最近一直在玩它。但是,当我试图删除2D数组的最后两行时:

array2d = [["a", "b", "c"],[0],[3, 2, 1],[0],[5,6,7]]

Ruby以某种方式为我删除了第二行。当我尝试将第二行中的零存储为字符串时:

array2d = [["a", "b", "c"],["0"],[3, 2, 1],[0],[5,6,7]]

Ruby不会删除“零行”。

Ruby是否有任何特殊的机制处理零? Ruby认为数组为“0”整数为空吗? 这是我写的整个代码:

array2d = [["a", "b", "c"],[0],[3, 2, 1],[0],[5,6,7]]

array2d.each do |row|
    print "["
    row.each do |cell|
        print cell.to_s + ","
    end
    puts "]"
end


last=4
last.downto(3) do |i|
    row = array2d[i]
    row.each_with_index do |cell, j|
        puts "array2d[" + i.to_s + "][" + j.to_s + "] = " + cell.to_s
    end
    array2d.delete(row)
end

array2d.each do |row|
    print "["
    row.each do |cell|
        print cell.to_s + ","
    end
    puts "]"
end

1 个答案:

答案 0 :(得分:0)

您正在调用array2d.delete([0])。这会删除[0]所有个实例。 Ruby无法判断您要删除哪一个以及哪个不删除,尤其是因为您甚至没有尝试删除第一个实例。 Ruby如何知道您只想删除 last 实例?

如果要从多维数组中删除行,请将行的索引与delete_at一起使用。

last = 4
last.downto(3) do |i|
    # ...
    array2d.delete_at(i)
end