Ruby Quick Reference

Quick reference for efficient coding

View the Project on GitHub YumaYX/RubyQuickReference

objects_to_text.rb(text)

The provided Ruby code defines an array of hashes, each containing an id and two arrays (val1 and val2). The puts statement prints the keys of the first hash, separated by tabs. Then, for each entry in the data array, the code retrieves the id, val1, and val2 values. It determines the maximum length between val1 and val2, iterating up to this length. Within the loop, it conditionally sets the output for the id (only on the first iteration), val1, and val2, handling potential nil values. Finally, it prints these values, joined by tabs, for each iteration.

Execution:

data = [
  {:id => "a", :val1 => [1, 2, 3], :val2 => [3, 4]},
  {:id => "b", :val1 => [0], :val2 => [9, 8, 7]}
]
#=> 
[{:id=>"a", :val1=>[1, 2, 3], :val2=>[3, 4]},


puts data.first.keys.join("\t")
id	val1	val2
#=> nil

data.each do |entry|
  id = entry[:id]
  val1 = entry[:val1]
  val2 = entry[:val2]
  
  max_length = [val1.length, val2.length].max
  max_length.times do |i|
      id_output = (i == 0 ? id : "")
      
      val1_output = (val1[i].nil? ? "" : val1[i])
      val2_output = (val2[i].nil? ? "" : val2[i])
      
      puts [id_output, val1_output, val2_output].join("\t")
  end
end
a	1	3
	2	4
	3	
b	0	9
		8
		7
#=> 
[{:id=>"a", :val1=>[1, 2, 3], :val2=>[3, 4]},
 {:id=>"b", :val1=>[0], :val2=>[9, 8, 7]}]

Executed with Ruby 3.3.5