如何将数组分解为子数组?

时间:2016-01-25 21:53:59

标签: arrays ruby object

我正在尝试操作数组数组,这样我就可以将每个单独的数组作为变量访问。

在我的代码中,我以数组数组的形式存储7个不同的用户输入条目。这些条目是由空格分隔的两个值,即用户输入1后跟一个空格,后跟4提供数组["1","4"]

#user prompt repeated 7 times    
puts "enter segments: "
e1 = gets.chomp.split
#etc...

entries = [e1, e2, e3, e4, e5, e6, e7] #e.g. 'eX' may be of form ["n", "n2"]
new_values = []


@dict = [2,3,1,2,3,2,3,3,1]
entries.each do |convert|
    convert.each do |get_integers|
        get_integers.each do |get_strings|
            new_values << @dict[get_strings.to_i]
        end
    end
end

array_of_new = new_values.slice(2)

我想:

  • entries中每个子阵列的元素转换为整数
  • 然后在entries个子数组中,我想用i
  • 替换每个元素@dict[i]

我所拥有的代码完成了以上所有操作,但我最终得到了一个包含所有新值的扁平数组。

如何将最终数组分解为新的数组数组(因此结构与entries数组相同)?我尝试使用slice方法,但这只是让我回到我正在切片的位置。

另外,我很肯定有一种更好的方法来完成我正在做的事情,所以如果有人有任何建议,我愿意接受它!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

entries = []
7.times do 
    puts "enter segments: "
    entries << gets.chomp.split.map!{|e| e.to_i }
end

@dict = [2,3,1,2,3,2,3,3,1]
array_of_new = []

entries.each do |sub_array|
    s_arr = []
    sub_array.each do |element| 
        s_arr << @dict[element]
    end
    array_of_new << s_arr
end

p array_of_new

如果您想使用each_slice方法,那么您可以执行以下操作:

entries = []
7.times do 
    puts "enter segments: "
    entries << gets.chomp.split.map!{|e| e.to_i }
end


@dict = [2,3,1,2,3,2,3,3,1]
arr = []

entries.each do |sub_array|
    sub_array.each do |element| 
        arr << @dict[element]
    end
end

array_of_new = []
arr.each_slice(2) {|s| array_of_new << s }                          

p array_of_new

更新:更简单,更智能的方法是实际转换entries数组,而不必创建新的容器数组:

entries = []
7.times do 
    puts "enter segments: "
    entries << gets.chomp.split.map!{|e| e.to_i }
end

@dict = [2,3,1,2,3,2,3,3,1]

entries.each do |sub_array|
    sub_array.map!{|e| @dict[e] }
end

p entries