gpt4 book ai didi

ruby-on-rails - 将元素推送到 ruby​​ 数组中的特定索引处

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:49 24 4
gpt4 key购买 nike

我有一个从数据库返回的数组数组,我想确保它们的长度始终相同。当它们不是时,我想压入零以使它们具有适当的长度,同时保持索引的完整性。

大多数时候它看起来像

array = [["apple", "blueberries", "banana", "kiwi"], ["20.15", "13.50", "22.10", "10.50"], ["10", "12", "26", "34"]]

我最终会调用 each_with_index 并需要它们匹配,即。表中的苹果,20.15,10。

数组中经常会缺少一个或两个元素,我想将零填入它们的位置。

array2 = [["apple", "blueberries", "banana", "kiwi"], ["20.15", "22.10"], ["10", "12", "26", "34"]]

我试过类似的东西

array2.each {|f| f.push(0) until f.length === 4}
=>[["apple", "blueberries", "banana", "kiwi"], ["20.15", "13.50", 0, 0], ["10", "12", "26", "34"]]

但零将被推到数组的末尾 - 理想情况下输出将是

=>[["apple", "blueberries", "banana", "kiwi"], ["20.15", 0, "13.50", 0], ["10", "12", "26", "34"]]

最佳答案

我不想告诉你,但对于 child 来说,编程并不是一件容易的事,就像非程序员的成年人有时想象的那样。您的案例要求创建一个单独的类,也许是 Array 的子类。像这样:

class GreenGrocer < Array
end

现在我们可以想象重新定义 GreenGrocer.new 公共(public)类方法以确保每个 GreenGrocer 实例都缺少用零修补的元素,如下所示:

class GreenGrocer # reopening the class we defined earlier
class << self
def new array
produce, float_array, int_array = array.reduce( &:zip ).map( &:flatten ).transpose
super [ produce, float_array.map { |e| e or 0.0 }, int_array.map { |e| e or 0 } ]
end

def [] *elements; new elements end
end
end

# so we can call

g = GreenGrocer.new( array2 )

# or

g = GreenGrocer[ *array2 ]

但何必呢?制作一个 #to_table 方法,根据需要将不完整的数据结构转换为表格,并在此过程中用零填充缺失的数据点就足够了。所以我们定义:

class LazierGreenGrocer < Array
def to_table
reduce( &:zip ).map( &:flatten ).map { |e| e.map { |e| e || 0 } }
end
end

lazier_g = LazierGreenGrocer.new( array2 ) # not eager to do work upon initialization
lazier_g.to_table # does the required work as #to_table is called

这就是我的处理方式。由于我不知道您想输出哪种类型的表,因此您可能需要相应地修改我的#to_table 方法。

关于ruby-on-rails - 将元素推送到 ruby​​ 数组中的特定索引处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418344/

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