Bir dizinin içeriği genellikle değiştirilmesi gerekecektir; örneğin bir oyuncunun envanterinden bir öğe kaldırmak gerektiğinde. Luau, tablolarla kullanmak için gömülü fonksiyonlar sağlar, bu da işlemleri kolaylaştırır.
Bu makale, bir değeri nasıl arayacağınızı açıklarken, eklemek ve kaldırmak gibi tablolar için önceden tanımlanmış fonksiyonları ana hatlarıyla belirtecektir.
Bu becerileri uygulamak için, bir oyuncunun envanterini yönetmeye yardımcı olacak bir betik oluşturacaksınız.

Dizilere değer ekleme
Bir diziye yeni bir değer eklemek için table.insert(array, valueToInsert) kullanın. İkinci parametre, Player veya IntValue gibi bir dize, sayı veya tam bir nesne gibi herhangi bir değer olabilir.
Pratik yapmak için, oyuncu öğelerini bir tabloda depolayacak bir betik oluşturacak ve ardından buna ekleme yapacaksınız. Bu örnek sadece bir betik olduğu için, herhangi bir dosya veya projede kullanılabilir. Kodun test edilmesi Çıktı penceresi kullanılarak yapılacaktır.
playerItems adında boş bir dizi oluşturun.
playerItems = {}Diziye envanter öğeleri eklemek için table.insert() yazın. Parantez içinde, eklemek için tablo olan playerItems'ı yazın ve ardından her öğe için bir dize girin. En az üç değer ekleyin.
playerItems = {}table.insert(playerItems, "İksir")table.insert(playerItems, "Ekmek")table.insert(playerItems, "Yatak Çantası")print(playerItems)Projeyi çalıştırın. Çıktı bölümünde üç noktayı ... genişletin ve yazdırılan tabloyu görün.
Dizilerden değer kaldırma
Bir değeri kaldırmak için, örneğin bir oyuncu bir öğe kullandığında veya aktif oyuncular listesinden biri deneyimi terk ettiğinde table.remove() kullanın. Sağlanan parametrelere bağlı olarak, fonksiyon ya bir tablonun son değerini ya da belirli bir indeksteki değeri kaldırabilir.
Son değeri kaldırma
Bazen bir betiğin belirli bir öğeyi kaldırması gerekir. Örneğin, bir oyuncunun envanterindeki ilk öğeyi kaldırmak veya bir listedeki ilk oyuncuyu seçmek. Bir dizideki son değeri kaldırmak için table.remove(arrayName) kullanın. Bu durumda, tek gerekli parametre, tabloyun kendisidir.
Önceki örnekteki öğe dizisini kullanın. Ardından, tablodan son değeri kaldırmak için, bu durumda "Yatak Çantası", table.remove(playerItems) yazın.
playerItems = {}table.insert(playerItems, "İksir")table.insert(playerItems, "Ekmek")table.insert(playerItems, "Yatak Çantası")table.remove(playerItems)print(playerItems)Projeyi çalıştırın. Çıktı penceresinde, son değer olan "Yatak Çantası"nın yazdırılmadığını kontrol edin.
İndekse göre kaldırma
Dizide belirli bir noktadaki bir değeri kaldırmak için, ikinci parametreye kaldırılacak indeks olan table.remove(arrayName, 1) gibi bir değer girin.
Aynı tabloyu kullanarak table.remove() yazın. Parametrelerde tablonun adını ve kaldırılacak değeri 1 girin.
playerItems = {}table.insert(playerItems, "İksir")table.insert(playerItems, "Ekmek")table.insert(playerItems, "Yatak Çantası")table.remove(playerItems, 1)Projeyi çalıştırın. "İksir" değerinin kaldırıldığını kontrol edin.
Dizide değer arama
Dizilerde belirli değerleri bulmak için, örneğin kazanan bir oyuncunun adını bulmak için, table.find() fonksiyonunu kullanın. Alternatif olarak, for döngüleri ve if ifadeleri kullanarak kendi arama fonksiyonunuzu da yazabilirsiniz.
Tek bir değeri bulma ve döndürme
Bir dizide bir değeri bulmak için, ilk bulduğu eşleşen değerden sonra duracak şekilde bir findValue() adında bir fonksiyon oluşturun.
Değeri bulduğunda, fonksiyon return anahtar kelimesini kullanarak o değerin indeksini döndürecektir. Bir indeks ile, diziden kaldırabilirsiniz.
Aşağıdaki playerItems adlı diziyi kopyalayın.
local playerItems = {"İksir","Ekmek","Ekmek","Yatak Çantası"}İki parametre ile yeni bir findValue() fonksiyonu yazın:
whichArray - üzerinden arama yapılacak dizi.
itemName - kontrol etmek için belirli dize.
local function findValue(whichArray, itemName)end
findValue() içinde, dizideki herhangi bir değerin itemName ile eşleşip eşleşmediğini kontrol etmek için bir for döngüsü kullanın. Değer eşleşirse, return anahtar kelimesini kullanarak, currentIndex değişkeninde bulunan değeri döndürün.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendArama fonksiyonunu test etmek için valueFound adında bir değişken oluşturun ve findValue() çağrısını yapın. Aranacak diziyi ve hangi değerin aranacağını geçin. Çalıştır seçeneğini kullanarak, beklenen çıktının indeks 2 olduğunu doğrulayın.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then-- currentIndex'in değerini geri gönderirreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Ekmek")print("Değer indeks " .. valueFound .. " 'de bulunuyor.")
Bir değeri kaldırma
Eğer bir değer, arama fonksiyonu ile bulunduysa, kaldırılabilir. Bir if ifadesi ile bir değerin bulunup bulunmadığını kontrol edin.
valueFound içinde bir değerin bulunup bulunmadığını kontrol edin; eğer öyleyse, değeri table.remove() ile kaldırın.
if valueFound thentable.remove(playerItems, valueFound)endAşağıdaki kodu kullanarak diziyi yazdırın.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("İndeks " .. index .. ": " .. itemString)endOynatma testleri yapın ve ilk "Ekmek" değerinin diziden kaldırıldığını kontrol edin. findValue() içindeki ikinci parametreyi değiştirerek diğer değerleri kaldırmayı deneyin.
Bu fonksiyon yalnızca bir kez çağrıldığı için, yalnızca "Ekmek"in ilk örneği kaldırılmıştır. Aşağıdaki bölüm, tüm örnekleri bulup kaldırmayı kapsayacaktır.
Belirli bir değerin tüm örneklerini bulma ve kaldırma
Önceki kod yalnızca bulunan bir değerin ilk örneğini kaldırabiliyorsa, bu kod parçacığı bir dizideki tüm örnekleri bulup kaldıracaktır. Örneğin, bir oyuncu oyundaki bir dükkanda tüm ekmeklerini satmak isteseydi.
En az dört değere ve bir kopyaya sahip playerItems adında bir dizi kullanın.
local playerItems = {"İksir","Ekmek","Ekmek","Yatak Çantası"}Diziyi kontrol etmek için, playerItems üzerinden geriye dönen bir for döngüsü oluşturun ve #playerItems'dan başlayarak 1'de sona erip -1 ile artış yapın.
for index = #playerItems, 1, -1 doendDöngü içinde, playerItems[index] içindeki değerin "Ekmek" ile eşit olup olmadığını kontrol etmek için bir if ifadesi kullanın ve eğer öyleyse, öğeyi kaldırın.
for index = #playerItems, 1, -1 doif playerItems[index] == "Ekmek" thentable.remove(playerItems, index)endendDiziyi yazdıran ikinci bir for döngüsü eklemek için aşağıdaki kodu kullanın.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("İndeks " .. index .. ": " .. itemString)endBetiği çalıştırın ve tüm "Ekmek" değerlerinin kaldırıldığını kontrol edin.
Özet
Değerler bir diziye eklenebilir veya kaldırılabilir, ancak bu işlemleri gerçekleştirirken indekslerin kaymasına dikkat edin. Bir değerin tüm örneklerini kaldırmak için döngüler kullanın veya sadece bulunan ilk örneği kaldırın.
return anahtar kelimesi bir döngüyü durdurmak ve gereken yerde bilgiyi geri göndermek için kullanılabilir.
Tamamlanmış bir betik sürümüne aşağıdan ulaşabilirsiniz.
Aşağıdaki proje, bu eğitimdeki tüm betikleri içermektedir. Buradan indirin.
Tüm betikler ServerScriptService içinde ve devre dışı durumdadır. Bir betiği kullanmak için, özelliklerinde "Devre Dışı" alanını işaretini kaldırın ve Studio'yu çalıştırın.