gpt4 book ai didi

arrays - 清理由 nils 组成的数组数组

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:22 25 4
gpt4 key购买 nike

例如我有一个数组:

[[nil, nil], [1, 2], [nil, nil], [nil, nil]] 

最好的清洁方法是什么?数组必须只有不包含 nil 的数组。清洁后必须:

[[1,2]]

类似于:

[[nil, nil], [1, 2], [nil, nil], [nil, nil]].each {|x| x - [nil]} 

最佳答案

删除 nil 元素的数组方法称为 compact .但是,这对于这种情况还不够,因为您有一个数组数组。另外你会想要select非零数组,或 reject nil 的数组。您可以通过以下方式轻松地将两者结合起来:

[[nil, nil], [1, 2], [nil, nil], [nil, nil]].reject { |arr| arr.compact.empty? }

这仅在您有数字子数组或 nil 时才有效。如果您的子数组包含两个,例如[1, nil, 2],则此解将保留整个子数组。

可以在迭代子数组时改变子数组以删除 nil,但可以认为在迭代时进行变异是一种练习。尽管如此,实现此目的的方法是使用 compact 方法的 bang 版本,它会改变原始对象:

.reject { |arr| arr.compact!.empty? }

这将采用 [[1, 2, nil, 3]] 并返回 [[1, 2, 3]]

正如 sagarpandya82 指出的,您还可以使用 allany?方法用于简单地检查是否所有内容都为 nil,或者是否有任何内容为 nil 而不是删除 nil

回顾一下:

original_array = [[nil, nil],[1, nil, 2], [1, 2, 3]]
original_array.reject { |arr| arr.all?(:nil) } # returns [[1, nil, 2], [1, 2, 3]]
original_array.reject { |arr| arr.compact.empty? } # returns [[1, nil, 2], [1, 2, 3]]
original_array.reject { |arr| arr.any?(:nil) } # returns [[1, 2, 3]]
original_array.reject { |arr| arr.compact!.empty? } # returns [[1, 2, 3], [1, 2]]

关于arrays - 清理由 nils 组成的数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com