2016-05-12 4 views
0

Ich mag würde Nummern und Ausgabe als Gruppen von vier zu formatieren, so dass es in etwa so aussieht:Formatierung Ausgabe von Zahlen von 4 auf jeder Linie

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

ich getan habe:

def convert_to_array(str) 
    arr = str.split(' ') 
    new_arr = arr.sort_by(&:to_i) 
    #format(new_arr.to_s) 
end 

def str 
    string = <<-_END_ 
    4 6 2 14 
    15 8 13 1 
    10 5 9 12 
    7 11 16 3 
       _END_ 
    convert_to_array(string) 
end 

Die Ausgang dieser ist:

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 

I pp als format Methode verwendet:

require 'pp' 

def format(input) 
    string = input.to_s 
    pp string 
end 

jedoch der Ausgang dieses wie folgt aussieht:

"[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\ 
", \"13\", \"14\", \"15\", \"16\"]" 

Wie kann ich die Formatierung als fix it in Gruppen von vier wie im obigen Beispiel setzen?

Antwort

4

Sie müssen nur Enumerable#each_slice auf Ihre Methode hinzufügen. Da das einen Enumerator zurückgibt, müssen Sie dann Enumerable#to_a anheften.

def convert_to_array(str) 
    str.split.sort_by(&:to_i).each_slice(4).to_a 
end 

convert_to_array(string) 
    #=> [["1", "2", "3", "4"], 
    # ["5", "6", "7", "8"], 
    # ["9", "10", "11", "12"], 
    # ["13", "14", "15", "16"]] 

Beachten Sie, dass String#split ohne Argument ist die gleiche wie split(/\s+/).

die Ergebnisse anzuzeigen:

convert_to_array(string).each { |a| puts a.join(' ') } 
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

Für

string 
    #=> " 4 6 2 14\n 15 8 13 1\n 10 5 9 12\n 7 11 16 3\n" 

wir berechnen

a = string.split 
    #=> ["4", "6", "2", "14", "15", "8", "13", "1", 
    # "10", "5", "9", "12", "7", "11", "16", "3"] 
b = a.sort_by(&:to_i) 
    #=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", 
    # "10", "11", "12", "13", "14", "15", "16"] 
c = b.each_slice(4) 
    #=> #<Enumerator: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
    #     "11", "12", "13", "14", "15", "16"]:each_slice(4)> 
c.to_a 
    #=> [["1", "2", "3", "4"], 
    # ["5", "6", "7", "8"], 
    # ["9", "10", "11", "12"], 
    # ["13", "14", "15", "16"]] 
+0

Ich liebe deine Antworten lol. – 13aal

+1

Ich freue mich sehr, wenn ich dem Leser ein Lächeln ins Gesicht bringen kann; Ein lol ist noch besser. –

2

können Sie each_slice verwenden

def put_slices(array) 
    array.each_slice(4) do |slice| 
    puts slice.join(' ') 
    end 
end 

put_slices(str) 
+0

Oh, das ist genial! – 13aal

+0

Es wäre noch toller, wenn die Elemente sortiert würden, wie es die Frage erfordert. –

Verwandte Themen