【问题标题】:Split array into multiple arrays in Ruby based on index在Ruby中根据索引将数组拆分为多个数组
【发布时间】:2013-11-20 17:07:23
【问题描述】:

我有以下数组:

array = [["Group EX (Instructor)", 0.018867924528301886], ["Personal Reasons", 0.018867924528301886]]

我需要将这个数组动态拆分为两个数组:

text_array = ["Group EX (Instructor)", "Personal Reasons"]

number_array = [0.018867924528301886,0.018867924528301886]

我目前正在这样做,这不可能是正确的方式:

array.each do |array|
  text_array << array[0]
  number_array << array[1]
end

【问题讨论】:

    标签: ruby arrays multidimensional-array


    【解决方案1】:

    只需使用#transpose。

    array = [["Group EX (Instructor)", 0.018867924528301886], ["Personal Reasons", 0.018867924528301886]]
    a1, a2 = array.transpose
    #=> [["Group EX (Instructor)", "Personal Reasons"],
     [0.018867924528301886, 0.018867924528301886]]
    

    修复现有代码,

    text_array = array.map { |x| x[0] } #give back first element of each subarray
    number_array = array.map { |x| x[1] } #give back second element of each subarray
    

    【讨论】:

      【解决方案2】:

      我会这样做:

      array = [["Group EX (Instructor)", 0.018867924528301886], ["Personal Reasons", 0.018867924528301886]]
      text_array,number_array = array.flatten.partition{|e| e.is_a? String }
      text_array # => ["Group EX (Instructor)", "Personal Reasons"]
      number_array # => [0.018867924528301886, 0.018867924528301886]
      

      【讨论】:

        【解决方案3】:

        这也有效:

        text_array, number_array = array.first.zip(array.last)
        

        但transpose 显然是你想要的。

        【讨论】:

          猜你喜欢
          • 2021-05-25
          • 1970-01-01
          • 1970-01-01
          • 2011-10-15
          • 1970-01-01
          • 1970-01-01
          • 2021-01-27
          • 1970-01-01
          • 2014-11-17
          相关资源
          最近更新 更多