每行打印数组项目3

时间:2018-01-29 22:49:41

标签: arrays ruby

使用下面我的整个动态数组输出,每行10个 - 我想设置一个参数,每行创建3个数组项,然后创建另外3行。

...     
     while i < arr.length
          print "Define types of coffee drinks: "
          coffee = gets.chomp
          arr[i] = coffee
          i += 1
        end
        puts arr.join(", ")
      break
...

例如,在创建动态数组后,它输出如:

black iced coffee, cold brew, espresso, flat white, frap, latte, drip, fancy, smancy

一行中的所有10个,我希望输出如下:

black iced coffee, cold brew, espresso,
flat white, frap, latte, 
drip, fancy, smancy

3 个答案:

答案 0 :(得分:2)

array.each_slice(3).with_index do |part, ind|
  puts part.join(", ") + (ind == 3 ? "" : ",")
end

可能就是你想要做的。

答案 1 :(得分:2)

这是一个简单的解决方案,几乎得到你所要求的:

array.each_slice(3) { |part| puts part.join(', ') }

#=> black iced coffee, cold brew, espresso
    flat white, frap, latte, drip
    fancy, smancy

然而,这是前两行的最后一个逗号。

如果这很重要,您可以尝试添加它:

array.each_slice(3) { |part| puts part.join(', ') + ',' }

#=> black iced coffee, cold brew, espresso,
    flat white, frap, latte, drip,
    fancy, smancy,

......但现在它也在最后一行!

这可能是一种稍微优雅的方式,但它有点繁琐......怎么样:

array.each_slice(3).with_index do |part, i|
  puts part.join(", ") + (array.size % 3 == i ? '' : ',')
end

#=> black iced coffee, cold brew, espresso,
    flat white, frap, latte, drip,
    fancy, smancy

答案 2 :(得分:2)

我可能会使用each_slicejoin来构建各行:

a.each_slice(3).map { |a| a.join(', ') }

然后再次join加入这些行:

puts a.each_slice(3).map { |a| a.join(', ') }.join(",\n")

当然,这假设除了最后一行之外的每一行都应包含三个元素,并且样本输出的第二行是拼写错误。