2016-07-31 6 views
1

3 개의 배열이 있고 각각의 문자열을 병렬로 인쇄하려고합니다. Ruby를 처음 접했습니다. 연결해야하는지 잘 모르겠습니까? 나는 정말로 테이블을 만들고 싶지만, 어떻게 생각하는지 모르겠습니다.루비 : 배열에서 문자열을 병렬로 인쇄하는 방법

내 현재 코드 :

name = ["Buffy Summers", "Willow Rosenberg", "Xander Harris"] 
age = ["17", "16", "18"] 
hair_color = ["blonde", "red", "brown"] 

print name[0] 
print " " 
print age[0] 
print " " 
puts hair_color[0] 

print name[1] 
print " " 
print age[1] 
print " " 
puts hair_color[1] 

print name[2] 
print " " 
print age[2] 
print " " 
puts hair_color[2] 

출력은 다음과 같습니다가 :

Buffy Summers 17 Blonde 
Willow Rosenberg 16 Red 
Xander Harris 18 Brown 

정말 그들처럼 정렬하는 것입니다. 나는 또한 반복해야한다는 것을 깨닫는다. 나는 초보자이다.

Buffy Summers 17 Blonde 
Willow Rosenberg 16 Red 
Xander Harris 18 Brown 
+0

, 방법은 부족한가? –

+0

명확성을 위해 수정되었습니다. @ScottHunter – morrime

답변

0

당신이 원하는대로 정렬, String#%에서 더 많은 정보를 얻을 :

나는 출력이 읽고 싶어.

max = name.group_by(&:length).max.first 

name.zip(age, hair_color).each do |name, age, hair_color| 
    puts "%-#{max}s %s %s" % [name, age, hair_color] 
end 

=> Buffy Summers 17 blonde 
=> Willow Rosenberg 16 red 
=> Xander Harris 18 brown 
0

데이터가 다음 네 개의 어레이에 포함되어 있다고 가정합니다.

name  = ["Buffy Summers", "Willow Rosenberg", "Xander Harris", "Granny", "Lucy"] 
age  = ["17", "16", "18", "101", "7"] 
hair_color = ["blonde", "red", "brown", "white", "purple"]  
col_fmt = [{justify: :L, pad: 4}, {justify: :R, pad: 2}, {justify: :L, pad: 3}] 

그러면 다음과 같이 출력 할 수 있습니다. 인덱스 |

arr = [name, age, hair_color] 
columns = col_fmt.zip(arr.map { |a| a.max_by(&:size).size }). 
    map { |h, sz| h.merge(width: sz) } 
    #=> [{:justify=>:L, :pad=>4, :width=>16}, {:justify=>:R, :pad=>2, :width=>3}, 
    # {:justify=>:L, :pad=>3, :width=>6}] 
arr.transpose.each do |a| 
    a.zip(columns).each do |attr, fmt| 
    print ' ' * fmt[:pad] 
    print fmt[:justify] == :L ? attr.ljust(fmt[:width]) : attr.rjust(fmt[:width]) 
    end 
    puts 
end 
#  Buffy Summers  17 blonde 
#  Willow Rosenberg 16 red 
#  Xander Harris  18 brown 
#  Granny   101 white 
#  Lucy    7 purple 
0

name = ["Buffy Summers", "Willow Rosenberg", "Xander Harris"] 
age = ["17", "16", "18"] 
hair_color = ["blonde", "red", "brown"] 

name.count.times 할 다음을 수행하십시오 |
박았 "# {이름 [인덱스]} # {연령 [인덱스]} # {hair_color [인덱스]}"
최종

name.count.times do |index| 
    printf "%-20s %-2s %-10s\n", name[index],age[index] , hair_color[index] 
end 
현재 가지고 무슨 코드
+0

이 열은 정렬되지 않습니다. – morrime

+0

마지막 두 번째 줄을 다음과 같이 바꾸십시오. printf "% -20s % -2s % -10s \ n", 이름 [index], 나이 [index], hair_color [index] – Rajnik

관련 문제