2016-04-12 1 views
0

Ich habe ein Array mit Wörtern, die ich als Schlüssel verwenden werde. I iterieren dieses Array Trog und die Wörter als Schlüssel und eine Benutzereingabe als Wert wie folgt vereinfacht ausgedrückt:Senden einer Zeile von Hash an Methode

input = Hash.new() 
array.each do |a| 

    input[a] = gets.strip 
end 

beispiels Array ["one", "twoo", "three"] und die Benutzereingaben zuerst: drei

Ich möchte passieren {"one" => "three"} So der aktuelle Schlüssel und Wert Jetzt möchte ich diese "Zeile" des Arrays an eine Methode übergeben, wie mache ich das?

+0

Was meinst du? Möchten Sie den Hash an eine Methode übergeben - 'foo (input)'? Oder möchtest du den aktuellen Wert übergeben - 'foo (input [a])'? Oder etwas anderes. Könnten Sie Beispiele hinzufügen? – ndn

+0

Ich möchte sowohl den aktuellen Schlüssel als auch den aktuellen Wert übergeben ich werde ein Beispiel! @ ndn – FroggyFreshh

+0

Wenn Sie erklären, was Sie zu erreichen hoffen, und warum Sie diese Methode gewählt haben, werden wir in einer viel geeigneteren Position sein, um zu helfen. – engineersmnky

Antwort

0

Genau diese Methode aufrufen und übergeben Sie Ihre „Linie“:

input = Hash.new() 

array.each do |a| 
    input[a] = gets.strip 

    # Send a line that user has inputed 
    your_method(input[a]) 

    # Send key and the line that user has inputed 
    your_method(a, input[a]) 
end 
1

Es ist noch unklar, was Sie erreichen wollen. So wie ich es sehe, können Sie eine von drei Dingen bedeuten:

  • „Ich habe den Schlüssel und den Wert übergeben werden soll, nachdem der Benutzer sich auf ein Verfahren tritt“

    array.each do |key| 
        input[key] = gets.strip 
        my_method(key, input[key]) 
    end 
    
  • eine mögliche Spin auf das ist „Aber ich möchte, dass sie als ein einziger Hash passieren“

    array.each do |key| 
        input[key] = gets.strip 
        my_method({key, input[key]}) 
    end 
    
  • „Ich möchte die gesamte Hash übergeben, nachdem die Benutzer alle Werte füllen“

    array.each do |key| 
        input[key] = gets.strip 
    end 
    my_method(input) 
    
+0

Der letzte ist, wie ich es bis jetzt gemacht habe. Die erste und zweite Option sind mehr, wonach ich suche! :) Danke vielmals! – FroggyFreshh

+0

Nur eine Anmerkung, dass man in # 2 'my_method (key => input [key])' schreiben kann. Froggy, es ist wohl idiomatischer, 'array.each_with_object ({}) zu schreiben, do | key, input | ...', was 'input' zurückgibt (und drop' input = Hash.new', aka 'input = {}'). –

0

ich einen Eindruck bekommen, dass Sie nicht zu einer Zeit, die gesamte Hash zu passieren versuchen. Wenn ja, hier ist die One-Line-Antwort

arr.each{|x| my_method({x => gets.strip})} 

Wenn ich falsch liege und Sie es auf einmal übergeben möchten. Hier ist die One-Line-Antwort

my_method(Hash[arr.zip(arr.map{gets.strip})])