你怎么能循环多个数组并行?

gqw*_*weg 8 ruby

我有4个阵列.

["one", "two", "three"]
["1", "2", "3"
["un", "deux", "trois"]
["ichi", "ni", "san"]
Run Code Online (Sandbox Code Playgroud)

是否可以连接各自数组中的每个元素?

所以我最终会得到像单行一样的字符串

"one, 1, un, ichi"\n
"two,2, deux,ni"\n
Run Code Online (Sandbox Code Playgroud)

等等...

是否可以在一个循环中执行此操作?

for i in (1..array1.count)

puts array1[i] + ", " + array2[i] + ", " + array3[i] + ", " + array4[i]

end
Run Code Online (Sandbox Code Playgroud)

当可能存在不可预测的数组并且它们各自的大小不相等时会发生什么?

gle*_*ald 5

简单:

a = [array1,array2,array3,array4] # or however many you have

puts a.transpose.map {|x| x.join(", ")}.join("\n")
Run Code Online (Sandbox Code Playgroud)

这将适用于任意数量的子阵列,只要它们具有相同的大小(无论大小是多少).

如果子数组的长度不同,但可以使用第一个的长度,则可以这样做:

a[0].zip(*a[1..-1]).map {|x| x.join(", ")}.join("\n")
Run Code Online (Sandbox Code Playgroud)


Rob*_*oli 4

好吧,如果您知道它们的长度都相同:

(0...array1.length).each{|i|puts array1[i] + ", " + array2[i] + ", " + array3[i] + ", " + array4[i]}
Run Code Online (Sandbox Code Playgroud)

编辑:以下代码有效

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]}
Run Code Online (Sandbox Code Playgroud)

Edit2:如果您不知道会有多少个数组,会发生什么?

我建议制作一个数组的数组;数组列表。创建一个数组数组(本质上是一个二维数组,但不能像数组一样进行索引),并用它为 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"
}
Run Code Online (Sandbox Code Playgroud)