gpt4 book ai didi

ruby - 在范围上使用 Ruby 映射

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

我正在尝试使用 .map,因此我不需要初始化产品数组。

原始代码如下:

products = []
for page in (1..(ShopifyAPI::Product.count.to_f/150.0).ceil)
products += ShopifyAPI::Product.find(:all, :params => {:page => page, :limit => 150})
end

这是我尝试过的:

products = (1..(ShopifyAPI::Product.count.to_f/150.0).ceil).map do |page|
ShopifyAPI::Product.find(:all, :params => {:page => page.to_i, :limit => 150})
end

哪个只返回第一个产品?我究竟做错了什么?

ShopifyAPI::Product 根据发送的参数页面和限制返回产品列表。

最佳答案

我不确定为什么您会发现第二个片段只返回第一个产品,但为了使其在功能上等同于第一个,您可以使用 flat_map而不是 map在这里,或者附加一个.flatten最后(或 flatten(1) ,如果你想更具体的话)

鉴于 .find调用返回一个数组,你可以在下面的例子中看到区别:

a = []
(0..2).each { |x| a += [x] }
# a == [0,1,2]

(0..2).map { |x| [x] }
# [[0], [1], [2]]

(0..2).flat_map { |x| [x] }
# [0, 1, 2]

那是因为array + array将两者结合起来。

如果您的第一个代码段改为使用 products.push(<find result>)然后您会看到相同的嵌套数组结果。

参见 Enumerable#flat_mapArray#flatten

关于ruby - 在范围上使用 Ruby 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45644380/

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