2016-10-10 1 views
-3

Ich schreibe kleines Programm, das Kochen simuliert werden soll. Ich habe eine Reihe von Objekten, die Zutaten sind. Jede Zutat hat Menge und Namen. Ich muss eine Methode implementieren, die die Menge der Zutat bei jeder Verwendung verringert. Ich habe eine Klasse Küche, wo Zutaten in einem Array gespeichert sind. Ich bin neu in Ruby, ich weiß wirklich nicht, wie man einzelne Eigenschaften eines einzelnen Objekts in Array ändert. Hier ist, was ich habe und was nicht kompiliert:Ändern Sie eine Eigenschaft in Array von Objekten Ruby

def get_ingredient(name, count) 
totalIngredientsCount = @ingredients.inject(0){|count, p| count + p.count.to_f} 

if (@ingredients.empty? == 0 || totalIngredientsCount == 0) 
    puts("Kitchen is empty") 
else 
    { 
     @ingredients.collect! { |i| 
     if (i.name == name) then 
      i.count = i.count - count #??? 
     else 
      puts 'There is no ingredient with given name' 
     end 
     } 
    } 
end 
end 

class Ingredient 
    def initialize(name, count) 
    @name = name 
    @count = count 
    end 

    attr_accessor :count 
    attr_reader :name 

end 
+0

Vielleicht ist dieses Problem zu groß für Sie. Hast du etwas Kleineres und Einfacheres versucht? –

+0

Wie sonst kann ich das angehen? Das ist meine Aufgabe. Ich weiß ein oder zwei Dinge über Programmierung, ich muss Ruby dafür verwenden, was im Allgemeinen nicht meine erste Wahl wäre ... – cAMPy

+0

Wenn ich du wäre, würde ich jemanden dafür bezahlen, dass er die Sache für mich programmiert. Und dann beantworte meine Fragen zum Code (damit ich später meinen Auftrag verteidigen kann). –

Antwort

1

Ich bin nicht sicher, was Sie versucht haben, aber ich würde vorschlagen, dass Sie Ihr Problem in kleine diskrete Sätze brechen, lösen die Sätze einer nach dem anderen, und schließlich setz sie zusammen.

Ihre Frage als Beispiel So verwenden, würde ich das Tun tun:

Problem 1: 
     - I have an array of objects which are ingredients. 
     - array_of_objects = [] 

     - Each ingredient has amount and name. 
     - the fact that ingredients have an amount and name makes me think of a key value object. So use a hash maybe? 
     - one_ingredient = {} 
      - I need a way to key track of an ingredient by name so add key name and set its value. 
      one_ingredient[:name] = "apple" 
      one_ingredient[:amount] = 2 

    - I need to put this ingredient into the array_of_objects 
     - array_of_objects.push one_ingredient 
     - this returns a data structure that looks like this: 
       [ {name: "apple, amount: 2} ] 

Können Sie sehen, was los ist? Das nächste, was Sie tun möchten, ist in den Klassen Array und Hash in Ruby nachzusehen, wie Sie Datenstrukturen manipulieren können. Denken Sie daran, wie ich eine Array und/oder eine Hash iterieren.

Zum Beispiel, schauen wir uns each Methode in Rubys Array Klasse. Wenn Sie auf den Link klicken, sehen Sie, dass Sie durch ein Array iterieren können, indem Sie alle darauf aufrufen und so auf Objekte innerhalb des Arrays zugreifen. So können wir so etwas tun:

array_of_objects.each do |object| 
    # each yields to a block and inside the block you have access 
    # to the object that has been yielded to each. Basically, if 
    # you use `pry` or debugger you can stop your code here, inspect 
    # your object, and also see what methods you can call on your 
    # object. 

    # since your object is a hash, you should try calling `each` on 
    # it. I believe Ruby Hashes have an each method - check to be  
    # sure. Then play around and see how you can access keys and 
    # values in a hash, and change their respective values.  
    end 

Sie können mit einfachen Methoden wie each oder each_with_key starten. Spiel mit denen herum.

Sobald Sie das herausgefunden haben, dann können Sie anfangen zu denken, eine class zu bauen, die all diese Konzepte zusammenbringt. Wenn Sie nicht durch einen Schritt denken können, können Sie versuchen, erneut auf Stackoverflow zu fragen, aber sehr spezifisch sein (und ich weiß, dass das schwierig ist, wenn man mit einer Sprache nicht vertraut ist, aber versuche einfach das Problem zu beschreiben Englisch).

Hoffe, das hilft. Viel Glück :)

Verwandte Themen