pairs() vs. ipairs()
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 3 / 54.
Hem pairs() hem de ipairs() fonksiyonlarını öğrendiğinize göre, her birini ne zaman kullanacağınızı anlamak önemlidir. Seçim tamamen tablonuzun yapısına ve neyi başarmaya çalıştığınıza bağlıdır.
1'den başlayan ardışık tam sayı anahtarlarına sahip liste tarzı bir tablonuz olduğunda ipairs() kullanın. Öğeleri sırayla işler ve ilk nil değerinde durur; bu da onu sıralamanın önemli olduğu diziler için mükemmel kılar.
Tablonuzda dize anahtarları, karışık anahtar türleri olduğunda veya boşluklara bakılmaksızın tüm girişlere erişmeniz gerektiğinde pairs() kullanın. Tablodaki her anahtar-değer çifti üzerinde belirli bir sıra olmaksızın yinelenir.
Şu karma tabloyu inceleyin:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}Eğer ipairs() kullanırsanız, sadece üç seviye dizgisini görürsünüz. Eğer pairs() kullanırsanız, dizgi anahtarları dahil olmak üzere beş girdinin tümünü görürsünüz.
Görev
KolayBir data tablosu alan ve sıralı tam sayı anahtarlı öğelerin sayısını döndüren bir countSequentialItems fonksiyonu yazın.
Tablonun sıralı kısmında (indeks 1'den başlayarak ilk nil değerine kadar) kaç öğe bulunduğunu saymak için ipairs() kullanın. Bu, karma tablolarla çalışırken ipairs() ve pairs() arasındaki farkı anlamanıza yardımcı olacaktır.
Parametreler:
data(table): Hem sıralı tam sayı anahtarlarını hem de dize anahtarlarını içeren karma bir tablo
Döndürdüğü Değer: Sıralı öğelerin sayısı (number)
Kopya kağıdı
1'den başlayan ardışık tam sayı anahtarlarına sahip liste stili tablolar için ipairs() kullanın. Öğeleri sırayla işler ve ilk nil değerinde durur:
for i, value in ipairs(myList) do
-- yalnızca ardışık öğeleri işler
endDize anahtarlı tablolar, karışık anahtar türleri veya boşluklara bakılmaksızın tüm girişlere erişmeniz gerektiğinde pairs() kullanın. Belirli bir sıra olmaksızın her anahtar-değer çifti üzerinde yinelenir:
for key, value in pairs(myTable) do
-- tüm anahtar-değer çiftlerini işler
endKarışık bir tablo örneği:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}
-- ipairs() yalnızca şunları görür: "Level 1", "Level 2", "Level 3"
-- pairs() beş girişin tümünü görürKendin dene
function countSequentialItems(data)
-- Kodunuzu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu