2016-12-01 6 views
-5

ich dieses verschachtelte Hash mit drei Antwort Teile haben:Wie Wert von einer verschachtelten Hash bekommen

enter image description here

Ich möchte bekommen:

q2a.text= "Purchasing experience" 
q2a.answer="4" 
q2b.text= "Design on the product" 
q2b.answer="4" 
q2c.text="Quality of the product" 
q2c.answer="4" 

aber ich weiß nicht, wie man TU es.

{ 
      :question_text => "Please rate the following based on your overall experience:", 
    :question_export_value => nil, 
      :question_type => "10", 
        :answer => [ 
     [0] { 
        :answer_part => "Purchasing experience", 
        :answer_column => "4", 
        :answer_text => "4", 
        :answer_other => nil, 
      :answer_export_value => nil, 
       :answer_comment => nil 
     }, 
     [1] { 
        :answer_part => "Design on the product", 
        :answer_column => "4", 
        :answer_text => "4", 
        :answer_other => nil, 
      :answer_export_value => nil, 
       :answer_comment => nil 
     }, 
     [2] { 
        :answer_part => "Quality of the product", 
        :answer_column => "4", 
        :answer_text => "4", 
        :answer_other => nil, 
      :answer_export_value => nil, 
       :answer_comment => nil 
     } 
    ], 
      :question_score => "0", 
      :question_code => nil, 
      :question_number => "2" 
} 
+3

Bitte posten Sie Ihre Daten zu erhalten, nicht nur einen Screenshot Ihrer Daten „Kauferlebnis“ erhalten Sie verwenden würden. –

+2

Versuchen Sie nicht, das System zu spielen, indem Sie wertlosen Text hinzufügen. Bitte lesen Sie "[fragen]" einschließlich der verlinkten Seiten und "[mcve]". Stack Overflow ist kein Diskussionsforum oder Chat-System. Jede Frage ist ein neuer Artikel in einem Online-Nachschlagewerk mit zugehörigen Antworten, wenn die Leute versuchen, das Problem zu lösen. Daher erwarten wir, dass die Fragen so kurz und detailliert sind, wie es zur Beschreibung des Problems erforderlich ist. Fluff und "Hash Hier ist der Hash: Ich muss mehr Details hinzufügen, sonst wird es mir nicht erlauben, einige andere Details zu veröffentlichen. Einige andere Details." Müllplatz. –

+3

Wir würden gerne Ihren Versuch sehen, das Problem zu lösen.Ohne Beweise für die Mühe sieht es so aus, als hättest du es nicht versucht und möchtest, dass wir den Code für dich schreiben. http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users/261593 wäre nützlich. –

Antwort

2

Sorry, aber die Frage ist ein wenig verwirrend, da die Nutzlast in Ihrem Screenshot und der Code, den Sie eingefügt haben, überhaupt nicht übereinstimmen. Denken Sie einige grundlegende Ruby-Syntax mit Hashes und Arrays erfahren möchten:

http://ruby-doc.org/core/Array.html

http://ruby-doc.org/core/Hash.html

Besuche Insbesondere die [] Methoden.

Ich werde versuchen, basierend auf der Nutzlast zu reagieren. Aber im Grunde arbeiten Sie mit einem Hash, wobei einer der Werte im Hash ein Array ist und jedes der Elemente in einem Array ein anderer Hash ist.

Also, aus der Haupt Hash-Start Sie so etwas wie dieses Also, um es zusammenzufassen

answers = payload[:answer] # where payload is the hash you posted 
q2a = answers[0] 
q2b = answers[1] 
q2c = answers[2] 
puts q2a[:answer_part], q2a[:answer_text] # prints "Purchasing experience" and "4" 
puts q2b[:answer_part], q2b[:answer_text] # prints "Design of the product" and "4" 
puts q2c[:answer_part], q2c[:answer_text] # prints "Quality of the product" and "4" 

haben greifen das Array mit dem Schlüssel :answer aus dem Hash, Index in das Array für die Daten, die Sie möchten, und Verwenden Sie dann die richtigen Tasten, um Ihre Daten zu erfassen.

2

Im Zweifelsfall wenden Sie sich an die docs. Auch in Zukunft, bitte verwenden Sie Code-Snippets anstelle von Screenshots, so kann ich Paste aus Ihrem Beispiel kopieren.

Ich gebe Ihnen einen kurzen Überblick über Ruby Hashes. Lassen Sie uns zuerst Ihren Hash erstellen. Ich werde eine verkürzte Version verwenden, weil ich nicht den gesamten Hash-Code eingeben möchte.

my_hash = { 
    question_text: "Please rate the following based on your overall experience", 
    question_export_value: nil, 
    question_type: 10, 
    answer: [ 
    { 
     answer_part: "Purchasing experience", 
     answer_column: "4", 
     answer_text: "4" 
    } 
] 
} 

die die Antworten bekommen Sie Sie mit dem appropraite Schlüsselhash zugreifen müssen: my_hash[:answer]. my_hash[:answer] zeigt tatsächlich auf ein Array von Hashes, beachten Sie die Klammern anstelle der geschweiften Klammern. Um zur ersten Antwort zu gelangen, verwenden Sie my_hash[:answer].first. Dies zeigt auf den ersten Hash im Array Antworten. Sie können Werte aus diesem Hash unter Verwendung des Schlüssels des gewünschten Werts ziehen.

my_hash[:answer].first[:answer_part] 

den Antworttext „4“

my_hash[:answer].first[:answer_text] 
+0

my_hash [: antwort] .second [: antwort_part] geht das zum zweiten Hash? – user1617237

+0

Nein, auf der Ebene my_hash [: answer] ist das Objekt ein Array (wobei jedes Element ein Hash ist): https://docs.ruby-lang.org/de/2.0.0/Array.html#method- i-erste Arrays haben .first und .last. Die normale Sache wäre, .each oder .map zu verwenden, um durch eine Liste von Elementen zu iterieren. – whodini9

Verwandte Themen