使用转置从列中删除“ nil”

时间:2018-08-02 00:53:19

标签: arrays ruby

我有一个嵌套数组:

arr = [[1,nil,2,3,4], [2,nil,4,5,6], [6,nil,3,3,5]]

子数组中nil的子数组中相同索引处的所有元素都必须删除。所有子数组中的第二个索引都有nil

我这样做了:

collection = arr.transpose.select(&:any?).transpose
# => [[1, 2, 3, 4], [2, 4, 5, 6], [6, 3, 3, 5]]

它对我有用,虽然我两次使用transpose。这项技术会导致数据混淆吗?在我看来,这很愚蠢。

1 个答案:

答案 0 :(得分:1)

@CarySwoveland在注释中指出了nil-vs-false警告,是的,您的double-transpose是安全的:它仅适用于以矩形开头的数据与,它将产生相等矩形的数据作为输出。您正在过滤掉整行,因此不会错位。

尽管它不是 super 高效的,但还算不错,并且比更直接的循环和操纵更具表现力和可读性。