gpt4 book ai didi

arrays - 过滤二维数组没有副作用

转载 作者:太空宇宙 更新时间:2023-11-03 18:07:26 25 4
gpt4 key购买 nike

我想过滤一个二维数组,获取所需的列索引并返回一个仅包含这些列的二维数组。除了空数组外,我想返回相同的二维数组。

另外,我不想修改原始数组,我希望在编写代码时不使用任何 if 语句,或者尽可能限制分支。

我想知道 Marshal#loadMarshal#dump 是否多余并使用 #map!

我选择使用 #map! 的原因是我不必使用 if..else..end block ,但我很好奇学习其他策略。

下面是我的解决方案:

def keep_columns args
matrix = Marshal.load Marshal.dump args[:matrix]
columns = args[:columns]
matrix.map! do |row|
row.select.with_index { |_,idx| columns.include? idx }
end unless columns.empty?
matrix
end

matrix = [['foo','bar', 'baz'],['cats', 'and', 'dogs']]

keep_columns matrix: matrix, columns: [0,2]
#=> [["foo", "baz"], ["cats", "dogs"]]
keep_columns matrix: matrix, columns: []
#=> [["foo", "bar", "baz"], ["cats", "and", "dogs"]]

最佳答案

你可以使用 Array#transpose前后Hash#values_at .

def extract_columns(arr, columns)
return arr if columns.empty?
arr.transpose.values_at(*columns).transpose
end

arr = [['foo','bar', 'baz'],['cats', 'and', 'dogs']]

extract_columns(arr, [0, 2])
#=> [["foo", "baz"], ["cats", "dogs"]]
extract_columns(arr, [])
#=> [["foo", "bar", "baz"], ["cats", "and", "dogs"]]

请注意,arr 没有被修改。

关于arrays - 过滤二维数组没有副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41773244/

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