码迷,mamicode.com
首页 > 其他好文 > 详细

ruby Matrix 输出 格式化

时间:2015-09-15 23:09:54      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

 1 require matrix
 2 
 3 class Matrix
 4     def to_pretty_s
 5         s = ""
 6         i = 0
 7         while i < self.column_size
 8             s += "\n" if i != 0
 9             j = 0
10             while j < self.row_size
11                 s +=   if j != 0
12                 s += self.element(i, j).to_s
13                 j += 1
14             end
15             i += 1
16         end
17         s
18     end
19 
20     def to_readable
21         maximal_length = 15
22         column_counter = 0
23         columns_arrays = []
24         while column_counter < self.column_size
25             maximum_length = 0
26             self.column(column_counter).each do |column_element|# Get maximal size
27                 length = column_element.to_s.size
28                 if length > maximal_length
29                     maximum_length = length
30                 end
31             end # now we‘ve got the maximum size
32             column_array = []
33             self.column(column_counter).each do |column_element| # Add needed spaces to equalize each column
34                 element_string = column_element.to_s
35                 element_size = element_string.size
36                 space_needed = maximal_length - element_size +1
37                 if space_needed > 0
38                     space_needed.times {element_string.prepend " "}
39                     if column_counter == 0
40                         element_string.prepend "["
41                     else
42                         element_string.prepend ","
43                     end  
44                 end
45                 column_array << element_string
46             end
47             columns_arrays << column_array # Now columns contains equal size strings
48             column_counter += 1
49         end
50         row_counter = 0
51         while row_counter < self.row_size
52             columns_arrays.each do |column|
53                 element = column[row_counter]
54                 print element #Each column yield the correspondant row in order
55             end
56             print "]\n"
57             row_counter += 1
58         end
59     end
60 
61     def my_print
62         matrix = self.to_a
63         field_size = matrix.flatten.collect{|i|i.to_s.size}.max
64         matrix.each do |row|
65             puts (row.collect{|i|   * (field_size - i.to_s.size) + i.to_s}).join(  )    
66         end
67     end
68 end
69 
70 m = Matrix[[12345678910, 333, 22.111], [3, 0.12345678, 3], [-333, 3, 4]]
71 
72 puts m # same as puts m.to_s
73 puts m.to_pretty_s
74 p m.to_pretty_s
75 m.to_readable
76 m.my_print
77 # Matrix[[12345678910, 333, 22.111], [3, 0.12345678, 3], [-333, 3, 4]]
78 # 12345678910 333 22.111
79 # 3 0.12345678 3
80 # -333 3 4
81 # "12345678910 333 22.111\n3 0.12345678 3\n-333 3 4"
82 # [     12345678910,             333,          22.111]
83 # [               3,      0.12345678,               3]
84 # [            -333,               3,               4]
85 # 12345678910          333       22.111
86 #           3   0.12345678            3
87 #        -333            3            4

 

ruby Matrix 输出 格式化

标签:

原文地址:http://www.cnblogs.com/jjtx/p/4811598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!