鉴于我有10个要迭代的项目,我想在每个3中放置一个br,就像这个例子一样。我怎么能在Ruby中做到这一点?
1
2
3
<br>
4
5
6
<br>
7
8
9
<br>
10
答案 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 }