我正在尝试操作数组数组,这样我就可以将每个单独的数组作为变量访问。
在我的代码中,我以数组数组的形式存储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
方法,但这只是让我回到我正在切片的位置。
另外,我很肯定有一种更好的方法来完成我正在做的事情,所以如果有人有任何建议,我愿意接受它!
答案 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