pairs und ipairs

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Viele Skripte müssen oft durch Dictionaries oder Arrays gehen. Aber manchmal, Sie wissen möglicherweise nicht den Anfang und das Ende dieser Datenstrukturen. Zum Beispiel, ein Wörterbuch von Spielern kann sich ändern, oder Spieler haben ein Array-Inventar von verschiedenen Größen.

In diesen Situationen können Sie pairs() und ipairs() verwenden. Dies kann mit einem for-Loop verwendet werden, um jedes Element ohne bekannte Start- und Endpunkte durchzugehen.

Dieser Artikel wird die Verwendung von ihnen abdecken und ein praktisches Skriptbeispiel haben, in dem Sie Restaurantbestellungen in einem Spielverfolgen.

Diktionare und Paare()

pairs() wird mit Dictionaries verwendet. Ein Beispiel ist unten zu sehen.


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " is " .. value)
end

pairs() kann verwendet werden, um mit einem Wörterbuch-Element-Schlüssel, Wert oder beides zu arbeiten. Im For-Loop unten ist die erste Variable der Schlüssel. Die zweite Variable ist der Wert. Das Wörterbuch, mit dem Sie arbeiten möchten, wird in pairs() übergeben.


local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("You have:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end

Wenn es ausgeführt wird, druckt der Code gefolgte Profile:


You have:
43 Gold Bricks
3 Carrots
2 Torches

Arrays und ipairs()

ipairs() wird mit Arrays verwendet. Das "i" in ipairs() steht für "Index." Verwenden Sie ipairs() und Arrays in Kombination mit einem for-Loop, um mit sortierten Werten wie Bestenlisten zu arbeiten. Ein Beispiel ist unten.


local players = {"Ali", "Ben", "Cammy"}
for playerRank, playerName in ipairs(players) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Wenn es ausgeführt wird, druckt der Code gefolgte Profile:


Winner #1 is Ali
Winner #2 is Ben
Winner #3 is Cammy

Übung - Restaurant-Suppe-Simulator

Lass uns etwas Suppe für einen Restaurantsimulator machen, bei dem Spieler aus einer Liste möglicher Suppeingredients auswählen. Die Zutaten werden als Schlüssel gespeichert, und die Werte beginnen mit falsch, damit die Spieler nur das bekommen, was sie auswählen.

Verwenden Sie pairs() , um zu sehen, was gewählt wurde, und dann ipairs() , um die Liste der Zutaten zu drucken.

  1. Erstellen Sie ein neues Wörterbuch mit dem Namen menu . Fügen Sie 3 - 5 Schlüsselwerte hinzu, bei denen der Schlüssel das Zutat ist und der Wert falsch ist.


    local menu = {
    cabbage = false,
    beef = false,
    tomato = false,
    noodles = false,
    }
  2. Unter dem Menü-Wörterbuch fügen Sie ein leeres Array hinzu, das später mit den Auswahlmöglichkeiten des Kunden gefüllt wird.


    -- Suppe des Kunden
    local selectedIngredients = {}
  3. Verwenden Sie pairs() , um zu überprüfen, ob jedes Zutat im Wörterbuch als wahr oder falsch markiert ist. Wenn Sie es wahr ist, fügen Sie das Zutat zu Suppe hinzu.


    -- Suppe des Kunden
    local selectedIngredients = {}
    -- Fügt ihren Suppe die Auswahl des Kunden hinzu
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Wiederholen Sie die Reihenfolge an den Kunden. Im Skript, das. PL: die Skriptskodieren Sie die folgenden Zeilen.

    • Überprüfen Sie, ob es ein Menü-Element in selectedIngredients gibt. Wenn so, drucken Sie "You ordered soup with: " .
    • Verwenden Sie ipairs() , um durch die selectedIngredients -Matrix zu gehen und jedes Zutat zu drucken.
    • Testen Sie, indem Sie mindestens einen Menüartikel auf "wahr" ändern.

    -- Druckt die Suppe-Bestellung aus "ausgewählte Zutaten"
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. In der if-Anweisung, die prüft, ob ein Artikelvorhanden ist, fügen Sie eine andere Bedingung hinzu, die den Kunden sagt, dass keine Zutaten ausgewählt wurden.


    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    else
    print("Nothing was selected. Are you not hungry?")
    end

Optionale Herausforderungen

Below are some challenges that apply using pairs and ipairs in different ways. Try seeing if you can build out the code for these. Herausforderung : Erstellen Sie einen Waiter-NPC anstelle des Ausgabe-Fensters, verwenden Sie den NPC aus Intro To Arrays , um einen Waiter zu erstellen, der Kundenanfragen annimmt. Herausforderung : Erlaube Spielern, Bestellungen aufzugeben, um Spielern die Auswahl einer Zutat zu ermöglichen, indem sie einen physischen Teil wie eine Näherungsmeldung berühren. Weitere Informationen finden Sie unter Näherungsmeldungen. Fortgeschrittene Herausforderung : Make Me Some Soup Simulator erstellen Sie einen Restaurantsimulator, in dem Spieler die Köche sind! Spieler müssen die Zutaten zusammenbringen, um die Bestellung, die ihnen vom Kellner gegeben wird, zu entsprechen.

  1. Erstellen Sie In-Game-Elemente für 3 - 5 verschiedene Zutaten.
  2. Erstellen Sie 3 - 5 Rezepte mit Diktionen, die dem in dieser Lektion ähneln.
  3. Erstellen Sie ein Array, das alle Rezepte enthält.
  4. Wähle zufällig ein Rezept aus und verwende einen NPC, um den Spielern zu erzählen, welche Zutaten sind.
  5. Erstellen Sie ein neues Wörterbuch, um ein Rezept zu erstellen, das auf den Zutaten basiert, von denen der Spieler berührt.
  6. Vergleichen Sie das Rezept des Spieler:inmit dem Rezept, das der NPC ausgewählt hat.
  7. Erhöhen Sie die Herausforderung, indem Sie ein zusätzliches Bedingung hinzufügen, wie z. B. einen Timer.