Bir dizi içeriğinin genellikle bir oyuncunun envanterinden bir öğeyi kaldırmak gerektiğinde olduğu gibi değiştirilmesi gerekecektir,örneğin.Luau, bunu kolaylaştırmak için masalarla kullanılmak üzere yerleşik işlevlere sahiptir .
Bu makale, değer aramanın nasıl yapılacağını açıklarken ek ve kaldır gibi tablolar için önceden oluşturulmuş işlevleri özetleyecektir.
Bu becerileri uygulamak için, bir oyuncunun envanterini bir oyundaki yönetmesine yardımcı olan bir senaryo oluşturacaksınız.

Dizilere değerler ekleyin
Bir dizeye yeni bir değer eklemek için, table.insert(array, valueToInsert) kullanın.İkinci parametre, bir dizi, sayı veya tüm bir nesne gibi herhangi bir değer olabilir, örneğin Player veya IntValue.
Egzersiz yapmak için, bir tabloda oyuncu öğelerini saklayan bir senaryo oluşturacak ve ardından ekleyeceksiniz.Bu örnek sadece bir senaryo olduğundan, herhangi bir dosya veya projeyle kullanılabilir.Kod testi Çıktı penceresi kullanılarak yapılacaktır.
Boş bir dize adında playerItems olan boş bir dize oluşturun.
playerItems = {}Envanter öğelerini table.insert() yazarak dizine ekleyin.Ebeveyn parantezinde, eklemek için playerItems , eklenmesi gereken tablo, her bir öğe için bir dize takip eder.En az üç değer ekleyin.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Projeyi çalıştırın. Çıktıda, basılan tabloyu görmek için üç noktayı ... genişletin.
Dizilerden değerleri kaldır
Bir değeri kaldırmak için, bir oyuncu bir öğe kullandıysa veya aktif oyuncu listesindeki bir kişi bir deneyimden ayrıldıysa, table.remove() kullanın.Verilen parametrelere bağlı olarak, işlev bir tablonun son değerini veya belirli bir indekste silebilir.
Son değeri kaldır
Bazen bir senaryonun belirli bir öğeyi kaldırması gerekir.Örneğin, bir oyuncunun envanterindeki ilk öğeyi kaldırmak veya bir listede ilk oyuncuyu seçmek.Bir dizedeki son değeri kaldırmak için table.remove(arrayName) kullanın.Bu kullanım durumunda, gerekli tek parametre tablonun kendisidir.
Önceki örneğin öğelerinin dizisini kullanın. Ardından, son değeri tableden kaldırmak için, bu durumda "Sleeping Bag" , table.remove(playerItems) yazın
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)Projeyi çalıştırın. Çıktı penceresinde, son değer, "Sleeping Bag", basılmamalıdır.
Dizinle kaldır
Dizide belirli bir noktada bir değeri kaldırmak için, ikinci parametrede kaldırılacak indeksi girin, örneğin table.remove(arrayName, 1).
Aynı tabloyu kullanarak, table.remove() . Parçalarda, tablo adını ve 1 , kaldırılacak değeri girin.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Projeyi çalıştır. İlk değer "Potion" kaldırıldığını kontrol edin.
Bir dize değerleri arama
Dizilerde kesin değerler bulmak için, kazanan bir oyuncunun adı gibi, table.find() fonksiyonunu kullanın.Alternatif olarak, kendi arama işlevinizi for döngüleri ve if ifadeleri kullanarak kodlayabilirsiniz.
Tek bir değer bul ve geri dön
Bir dizi değeri bulmak için, bir dizi geçen ve eşleşen bir değer bulduğunda ilk kez duran bir işlev oluşturun findValue() .
Değeri bulduktan sonra, işlev bu değerin indeksini döndürmek için return anahtarını kullanacaktır. Bir indeks ile, o anahtarı diziden kaldırabilirsiniz.
Aşağıdaki adındaki diziyi kopyalayın playerItems .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}findValue() adlı yeni bir işlevi iki parametre ile kodlayın:
whichArray - aranacak dizi.
itemName - kontrol edilecek özel dize.
local function findValue(whichArray, itemName)end
In findValue() , döngüde bir değer kontrol etmek için bir değer kümesindeki herhangi bir değerin eşleşip eşleşmediğini kontrol etmek için bir döngü kullanın itemName .Değer eşleşirse, currentIndex 'de bulunan değeri geri döndürmek için anahtar kelime return kullanın.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendArama işlevini valueFound adlı bir değişken oluşturarak ve findValue() çağırarak test edin.Aramak için arrayi geç ve aranacak değer. Beklenen çıkışın indeks 2 olduğundan emin olmak için kodu çalıştırın beklenen çıkışın indeks 2 olduğundan emin olmak için kodu çalıştırın
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Mevcut Index değerini geri gönderirreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Bir değeri kaldır
Bir değer bulma işlevi kullanılarak bulunduysa, kaldırılabilir. Bir değer if ifadesiyle bulunduysa kontrol edin.
Bir değerin valueFound içinde olup olmadığını kontrol edin; eğer öyleyse, değeri table.remove() kullanarak kaldırın.
if valueFound thentable.remove(playerItems, valueFound)endAşağıdaki kodu kullanarak diziyi basın.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endOynatma testi yapın ve ilk "Bread" değerinin dizeden kaldırıldığını kontrol edin.İkinci parametreyi değiştirerek diğer değerleri kaldırmayı deneyin findValue() .
Bu işlev bir kez çağrıldığından, yalnızca "Bread" ilk örneği kaldırıldı.Aşağıdaki bölüm, tüm örnekleri nasıl bulup kaldıracağınızı ele alacaktır.
Belirli bir değerin tümünü bul ve kaldır
Önceki kod sadece bulunan bir değerin ilk örneğini kaldırabilirken, bu kod parçacığı bir dizeden tüm olayları bulacak ve kaldıracaktır.Örneğin, eğer bir oyuncu tüm ekmeklerini oyun içi bir mağazada satmak istiyorsa.
En az dört değer ve bir dizi yinelenenler ile adlandırılan bir dizi kullanın playerItems .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Dizgeyi geçmek için, geriye doğru giden bir döngü oluşturun, başlangıçta , bitişte 1 ve -1 ile artış yapın.
for index = #playerItems, 1, -1 doendDöngüde, playerItems[index] içindeki değerin "Bread" ile eşit olup olmadığını kontrol etmek için bir if ifadesi kullanın ve eğer öyleyse, öğeyi silin.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendDöngüyü basan bir ikinci saniye eklemek için aşağıdaki kodu kullanın.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endKomutu çalıştırın ve "Ekmek" adındaki tüm değerlerin kaldırıldığını kontrol edin.
Özet
Değerler bir dizeye kaldırılabilir veya eklenebilir, ancak bunu yaparken indeks değişimlerine dikkat edin.Bir değerin tüm örneklerini kaldırmak veya sadece bulunan ilk örneği kaldırmak için bir döngü kullanarak bir tabloyu dolaşın.
Anahtar kelime return bir döngüyü durdurmak ve gerektiğinde bilgileri geri göndermek için kullanılabilir.
Senaryonun bitmiş bir versiyonu aşağıda referans olarak gösterilebilir.
Aşağıdaki proje, bu eğitimdeki tüm kodları içerir. İndir buradan .
Tüm kodların Sunucu Kript Hizmeti ve devre dışı bırakıldı olduğunu unutmayın.Bir senaryoyu kullanmak için, özelliklerinde, Devre dışı alanı iptal edin ve Studio'yu çalıştırın.