0

我正在尝试压缩 3 个变量,因为我在 3 个不同的数组上循环,但是数据类型被扭曲了,即使我可以打印变量并且它们是相同的,只是它们最终成为数组或其他数据类型......(如果我打印 l1 而不是 l1.class,我得到了正确的输出)

a = [1,2,3]
b = [1,2,3]
c = ['a','b','c']

然后

a.zip(b).each do |l1,l2|
  puts l1.class, l2.class
end

给出:

Integer
Integer
Integer
Integer
Integer
Integer

伟大的!

a.zip(b).zip(c).each do |l1,l2,l3|
  puts l1.class, l2.class, l3.class
end

Array
String
NilClass
Array
String
NilClass
Array
String
NilClass

如何压缩 3 个变量,保持它们的类型?

谢谢!

4

1 回答 1

2
e = a.zip(b)
  #=> [[1, 1], [2, 2], [3, 3]]
e.zip(c)
  #=> [[[1, 1], "a"], [[2, 2], "b"], [[3, 3], "c"]]

显示问题。请参阅数组#zip

您可以通过以下三种方式获得所需的结果。所有打印

Integer
Integer
String
Integer
Integer
String
Integer
Integer
String
a.zip(b,c).each { |arr| puts *arr.map(&:class) }

笔记

a.zip(b,c)
  #=> [[1, 1, "a"], [2, 2, "b"], [3, 3, "c"]]

如果删除了splat运算符 ( *),将打印以下内容:

[Integer, Integer, String]
[Integer, Integer, String]
[Integer, Integer, String]

a.each_index { |i| puts a[i].class, b[i].class, c[i].class }
  #=> [1,2,3]

[a.map(&:class), b.map(&:class), c.map(&:class)]
  .transpose
  .each { |r| puts *r }
  #=> [[Integer, Integer, String],
  #    [Integer, Integer, String], 
  #    [Integer, Integer, String]] 
于 2021-09-20T20:13:25.093 回答