Build 3x3 table from one array

I am new to ruby and still haven’t got my mind around iterators although
I think they are really cool.

I am stuck trying to figure out how to take an array of data and
dynamically build a 3x3 html table from it without standard for loops.

Here is the code in JavaScript:

var MAX_ROW = 3;
var MAX_COL = 3;
var nIdx = 0;

print("

");
for (var r = 0; nIdx < aList.length && r < MAX_ROW; r++)
{
print("");
for (var c = 0; nIdx < aList.length && c < MAX_COL; c++)
{
print("
");
	print(aList[nIdx].name);
	nIdx++;

	print("</td>");
}	// cols
print("</tr>");

} // rows
print("

");

Can someone point me in the right direction for how to do this. I found
each_index but still was at a loss.

Thanks for the help.
forest

forest wrote:

I am stuck trying to figure out how to take an array of data and
dynamically build a 3x3 html table from it without standard for loops.

Here is the code in JavaScript:
snip
Can someone point me in the right direction for how to do this. I found
each_index but still was at a loss.

Without giving it a lot of thought, I’d do something to the effect of:

rows = [
[ ‘col1’, ‘col2’, ‘col3’ ],
[ ‘cOl1’, ‘Col2’, ‘col3’ ],
[ ‘col1’, ‘COL2’, ‘COl3’ ],
]

output = ‘’

output << ‘


rows.each do |row|
output << ‘’
row.each do |col|
output << “”
end
output << ‘’
end
output << ‘
#{col}

puts output

On Mar 16, 2006, at 11:29 AM, forest wrote:

I am stuck trying to figure out how to take an array of data and
dynamically build a 3x3 html table from it without standard for loops.

Here’s one idea:

data = (1…9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

require “enumerator”
=> true

puts “

=> nil >> data.each_slice(3) do |row| ?> puts " " >> row.each { |cell| puts " " } >> puts " " >> end => nil >> puts "
#{cell}
1 2 3
4 5 6
7 8 9
" => nil

Hope that helps.

James Edward G. II

Pistos C. wrote:

forest wrote:

I am stuck trying to figure out how to take an array of data and
dynamically build a 3x3 html table from it without standard for loops.

Here is the code in JavaScript:
snip
Can someone point me in the right direction for how to do this. I found
each_index but still was at a loss.

puts %w(1 2 3 4 5 6 7 8 9).map{|x| “

” + x + “” }.
join.gsub(/(<td.*?/td>){3}/,"\n \&\n\n")

Thanks all. The each_slice solution I think will work the best for my
scenario. I really appreciate the help.

forest

data = (1…9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

require “enumerator”
=> true

puts “

=> nil >> data.each_slice(3) do |row| ?> puts " " >> row.each { |cell| puts " " } >> puts " " >> end

Hope that helps.

James Edward G. II

#{cell}

Yes, enumerator is part of the standard library. Go to http://ruby-
doc.org/stdlib/ and find enumerator (right after English) in the left
frame if ri isn’t helping.

Tim

I wrote next function (maybe need to be rewritten to method for Array
cass) -
def array_to_table(arr, width)
data = “


arr.each_slice(width) do |row|
data << “”
row.each do |elem|
data << ("”)
end
data << “”
end
data << “
" + yield(elem) + “

end

Using -
<%= array_to_table(User.find(:all), 3) {|user| “

#{user.name}
”} %>

require “enumerator”

Is this standard library?

I tried ‘ri Enumerator’ to learn more, but it just comes back talking
about SyncEnumerator, which is something else. (Trying the lowercase
‘enumerator’ didn’t work at all.)

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs