["one", "two", "three"]
["1", "2", "3"
["un", "deux", "trois"]
["ichi", "ni", "san"]
是否可以在各自的数组中连接每个元素?
所以我最终得到了像
这样的单行字符串"one, 1, un, ichi"\n
"two,2, deux,ni"\n
依旧......
是否可以在一个循环中执行此操作?
for i in (1..array1.count)
puts array1[i] + ", " + array2[i] + ", " + array3[i] + ", " + array4[i]
end
当不可预测的数组&它们各自不等大小?
答案 0 :(得分:5)
易:
a = [array1,array2,array3,array4] # or however many you have
puts a.transpose.map {|x| x.join(", ")}.join("\n")
这适用于任意数量的子阵列,只要它们的大小相同(无论大小是多少)。
如果子阵列的长度不同,但是可以使用第一个长度,你可以这样做:
a[0].zip(*a[1..-1]).map {|x| x.join(", ")}.join("\n")
答案 1 :(得分:4)
如果你知道它们的长度相同,那就好了:
(0...array1.length).each{|i|puts array1[i] + ", " + array2[i] + ", " + array3[i] + ", " + array4[i]}
修改:以下代码有效
array1 = ["one", "two", "three"]
array2 = ["1", "2", "3"]
array3 = ["un", "deux", "trois"]
array4 = ["ichi", "ni", "san"]
(0...array1.length).each{|i| puts array1[i] + ", " + array2[i] + ", " + array3[i] + ", " + array4[i]}
Edit2:如果您不知道会有多少阵列会发生什么?
我建议制作一个数组数组;数组列表。创建一个数组数组(本质上是一个2D数组,但它不能像索引一样),并使用它为arrayList中的每个数组逐个打印每一行。
此代码有效:
array1 = ["one", "two", "three"]
array2 = ["1", "2", "3"]
array3 = ["un", "deux", "trois"]
array4 = ["ichi", "ni", "san"]
arrayList = []
arrayList.push(array1, array2, array3, array4)
p arrayList
(0...array1.length).each{|i|
(0...arrayList.length).each{|j|
print arrayList[j][i] + ", "
}
print "\n"
}
答案 2 :(得分:3)
我会使用Enumerable#zip
来创建一个数组数组。它将创建一个数组,其中第一个元素是传递给它的所有数组的第一个元素的数组,依此类推第二个,第三个等等。然后浏览此列表并使用{{3}打印每个参数}。类似的东西:
a.zip(b, c, d).each do |l|
puts l.join(", ")
end
编辑:不,zip
对于追加数组而言不会很有帮助。 Array#join
方法对此有好处。你可以附加到zip
ped数组的末尾,但这并不容易:
e = a.zip(b, c)
e.length.times { |i| e[i].push(d[i]) }
答案 3 :(得分:1)
如果你使用的是ruby 1.9,你可以利用外部迭代器,这可以让你处理任意数量的数组:
array1 = ['one','two','three']
array2 = [1,2,3,4]
array3 = ['un','deux','trois']
array4 = ['ichi','ni','san']
def bundle(*enumerables)
enumerators = enumerables.map{ |e| e.to_enum }
loop { puts enumerators.map { |e| e.next }.join(', ') }
end
bundle(array1,array2,array3,array4)
产生
one, 1, un, ichi
two, 2, deux, ni
three, 3, trois, san