Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ruby数组中特定索引处的push元素_Ruby On Rails_Ruby_Arrays - Fatal编程技术网

Ruby on rails ruby数组中特定索引处的push元素

Ruby on rails ruby数组中特定索引处的push元素,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,我有一个从db返回的数组,希望确保它们的长度始终相同。当它们不是时,我想推零,使它们成为适当的长度,但也保持索引的完整性 大多数时候它看起来像 array = [["apple", "blueberries", "banana", "kiwi"], ["20.15", "13.50", "22.10", "10.50"], ["10", "12", "26", "34"]] 我最终会调用每个带有索引的\u,并需要它们在一个表中匹配苹果,20.15,10 每隔一段时间,一个数组中可能会缺少一两个

我有一个从db返回的数组,希望确保它们的长度始终相同。当它们不是时,我想推零,使它们成为适当的长度,但也保持索引的完整性

大多数时候它看起来像

array = [["apple", "blueberries", "banana", "kiwi"], ["20.15", "13.50", "22.10", "10.50"], ["10", "12", "26", "34"]]
我最终会调用
每个带有索引的\u
,并需要它们在一个表中匹配苹果,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"]]

在此作出一些假设:

  • 您不在乎它们是否匹配(根据您的示例输出)
  • array2
    的大小始终为4
  • array2
    将只缺少1或2个元素
  • array3=机箱阵列2.size 当4 阵列2 当3 阵列2+[0] 当2 array2.zip([0,0]).flant 其他的 提出“问题” 结束
    我不想告诉你们,但编程对孩子们来说并不是一件容易的事情,正如非程序员的成年人有时想象的那样。您的案例需要创建一个单独的类,可能是数组的子类。像这样:

    class GreenGrocer < Array
    end
    
    但是为什么要麻烦呢?创建一个
    #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
    
    class-LazierGreenGrocer

    我会这样做的。由于我不知道您希望输出哪种类型的表,您可能需要相应地修改我的
    #to_table
    方法。

    您应该提供更多信息。有什么标准吗?(类型、期望值列表等)——正如您所描述的,没有(明确的)方法来理解缺少了什么。i、 e.如果一个数组有3项而不是4项,是否有办法确定缺少哪一项?看起来不一致。是否确实要在其他元素为字符串的位置推送数字零?此外,第一个数组中的字符串是否属于某种类型的头?如果是,第一个数组(头)是否有丢失的项?如果它来自DB,您还应该说明您正在使用的gem(DB适配器)。很可能有一种方法可以获得
    散列
    ,而不是数组的
    数组
    。我试图将其分解为我认为最基本的问题版本,但看起来我做得太过分了,没有提供足够的信息@tompave,在您的场景中,我不需要知道哪一个没有4-任何数组都可能缺少项,它们不是头。我很欣赏这种见解,我认为散列是一种方法。使用了
    #to_table
    方法,效果非常好。谢谢考虑到你对问题的描述,我仍然认为这个解决方案行不通。它会在找到它们时填补空白,就像原始的-不起作用-解决方案一样。@topmave,确切的行为并不重要。编写任何一种行为的程序都很容易。重要的是,本案例羡慕OO解决方案。
    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 ]
    
    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