在Ruby中执行每个操作,如何在每n个项目中放置一个br

时间:2011-04-07 02:09:54

标签: ruby

鉴于我有10个要迭代的项目,我想在每个3中放置一个br,就像这个例子一样。我怎么能在Ruby中做到这一点?

1
2
3
<br>
4
5
6
<br>
7
8
9
<br>
10

9 个答案:

答案 0 :(得分:10)

解决方案1 ​​

(1..10).each_slice(3){|a| puts '<br>' unless a[0] == 1; puts a}

解决方案2 (红宝石1.9.2)

(1..10).chunk{|i| i.%(3).zero?}.each{|r, a| puts(a, *('<br>' if r))}

解决方案3

puts (1..10).each_slice(3).map{|a| a.unshift('<br>')}.flatten.drop(1)

解决方案4 (红宝石1.9.2)

puts ['<br>'].product((1..10).each_slice(3).to_a).flatten.drop(1)

解决方案5

puts (1..10).each_slice(3).with_object([]){|a, aa| aa.push('<br>', *a)}.drop(1)

解决方案6

puts (1..10).map{|i| i.%(3).zero?? [i, '<br>'] : i}

解决方案7 (ruby1.9.2)

puts (1..10).to_a.
  tap{|a| a.length.downto(1){|i| a.insert(i, '<br>') if i.%(3).zero?}}

答案 1 :(得分:4)

 (1..10).each do |i|
   puts i
   puts '<br>' if i % 3 == 0
 end

答案 2 :(得分:4)

>> (1..10).each_slice(3).to_a.map{|x|x.join("\n")}.join("\n<br>\n")
=> "1\n2\n3\n<br>\n4\n5\n6\n<br>\n7\n8\n9\n<br>\n10"

答案 3 :(得分:1)

如果我理解这个问题,他并没有说元素总是(1..10),我在这里看到的大多数答案只适用于这个特定情况,因为它们依赖于元素,不在索引中。一个更通用的解决方案,不仅适用于array = (1..10).to_a,而且可以使用任何大小的任何数组:

array.each_with_index do |o, i| 
  puts o
  puts '<br>' if i % 3 == 2
end

答案 4 :(得分:0)

(1..10).each do |i| 
    puts i
    if (i % 3 == 0) 
      puts "<br/>"
    end
end

答案 5 :(得分:0)

对于打印,我喜欢kurumi和DigitalRoss的组合:

array.each_slice(3) {|elems| puts elems.join("\n"), '<br>' }

这很有说服力,而且很直接。

答案 6 :(得分:0)

puts(
  (1..10)
  .each_with_index
  .map { |s, i| i % 3 == 2 ? [s, '<br>'] : s }
  .flatten
  .map(&:to_s)
  .join("\n")
)
  • 这不取决于初始值是整数。
  • 没有阻止的
  • #each_with_index()会返回一个生成器,这意味着您可以#map结果。
  • #flatten用于将“<br>”移回内线。您可以修改字符串s,如下所示:"#{s}#{i % 3 == 2 ? "\n<br>" : nil}"如果您不喜欢#flatten,或者由于某种原因您不能#flatten(例如您正在使用已嵌套数组。)
  • 最终#map是为了确保在加入之前一切都是字符串。如果你摆脱了上面提到的#flatten,那么你就不需要这个了。

答案 7 :(得分:-2)

不那么红宝石的东西

k = 3
while k < array.size
    arrays.insert(k,"<br />")
    k += 4
end
p array

答案 8 :(得分:-3)

我建议你做for(i=0;i<length;i++) { if (i%3) //put br }