查找一组 n 个数组中存在哪些公共元素的简洁方法是什么?
what's a clean way of finding which common elements exist in a set of n arrays?
我正在浏览我的数据库中的 table,其中有很多可选列。我想在我的数据库中的每条记录中找到包含数据的列。
我正在尝试做的一个简化示例如下:
[1,2,3,4,5] & [1,2,3,4] & [1,2,3] & [1,2]
#=> [1,2]
但是,我想要做的是 运行 这种针对数千条记录的操作。什么是完成此操作的干净方法?我感觉 ruby 可能对这类事情有一些定制的方法。
这是我决定写这个问题之前要做的事情:
sets_of_columns_with_data = TableName.all.map(&:attributes).map do |attrs|
attrs.select {|k,v| v}
end.map(&:keys)
所以此时,如果您遵循上面的代码,columns_with_data
现在相当于:
sets_of_columns_with_data = [
[1,2,3,4,5],
[1,2,3,4],
[1,2,3]
[1,2]
]
我想这是一种混乱的方式,看起来像这样:
always_used = sets_of_columns_with_data.first
sets_of_columns_with_data.each do |columns_with_data|
always_used = always_used & columns_with_data
end
什么是干净的,ruby-做这样的事情的方法?
谢谢
注意:
为了清楚起见,我保留了业务逻辑,但通常这不是您可以使用 SQL 时的最佳解决方案。
我不确定这是否解决了实际问题,但要应用二元运算,您可以使用 reduce
:
sets_of_columns_with_data = [
[1, 2, 3, 4, 5],
[1, 2, 3, 4],
[1, 2, 3],
[1, 2]
]
sets_of_columns_with_data.reduce(:&) #=> [1, 2]
我正在浏览我的数据库中的 table,其中有很多可选列。我想在我的数据库中的每条记录中找到包含数据的列。
我正在尝试做的一个简化示例如下:
[1,2,3,4,5] & [1,2,3,4] & [1,2,3] & [1,2]
#=> [1,2]
但是,我想要做的是 运行 这种针对数千条记录的操作。什么是完成此操作的干净方法?我感觉 ruby 可能对这类事情有一些定制的方法。
这是我决定写这个问题之前要做的事情:
sets_of_columns_with_data = TableName.all.map(&:attributes).map do |attrs|
attrs.select {|k,v| v}
end.map(&:keys)
所以此时,如果您遵循上面的代码,columns_with_data
现在相当于:
sets_of_columns_with_data = [
[1,2,3,4,5],
[1,2,3,4],
[1,2,3]
[1,2]
]
我想这是一种混乱的方式,看起来像这样:
always_used = sets_of_columns_with_data.first
sets_of_columns_with_data.each do |columns_with_data|
always_used = always_used & columns_with_data
end
什么是干净的,ruby-做这样的事情的方法?
谢谢
注意:
为了清楚起见,我保留了业务逻辑,但通常这不是您可以使用 SQL 时的最佳解决方案。
我不确定这是否解决了实际问题,但要应用二元运算,您可以使用 reduce
:
sets_of_columns_with_data = [
[1, 2, 3, 4, 5],
[1, 2, 3, 4],
[1, 2, 3],
[1, 2]
]
sets_of_columns_with_data.reduce(:&) #=> [1, 2]