[YARDIM] ipairs kullanımı

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı KaanPolat1881

  • Yeni Üye
  • *
    • İleti: 7
: 12 Mayıs 2021, 22:09:09
for v, k ipairs gibi kodların ne için kullanılır amaçları görevleri nedir?
 


MTASATURK

[YARDIM] ipairs kullanımı
« : 12 Mayıs 2021, 22:09:09 »

Çevrimdışı wicky

  • hasssssssikome
  • Acemi Üye
  • *
    • İleti: 170
Yanıtla #1 : 13 Mayıs 2021, 04:55:10
kodları denemek istersen: Linki görebilmek için Kayıt olun yada Giriş yapın.

ipairs, listeleri döndürmek için kullanılır (liste de bir tablo ancak index&value mantığını kullanan tablodur)

not: liste = array
Kod
-- basit bir array
local array =
{
    1,
    "2",
    true,
    {wicky = "idiot"} -- obje yani key&value mantığını kullanan bir tablo
}
print(array)
-- table: 61A60C90
--        ^^^^^^^^ bu sayılara şimdilik takılma, array'in de bir tablo olduğunu kanıtlamış olduk

bu listedeki tüm verileri almak için ipairs kullanabilirsin

not: önceki kodun devamı
Kod
-- index = listedeki sırası, value = değeri
for index, value in ipairs(array)
do
    print("sıra: "..index, "değer: "..value)
end
--[[ *Lua'da çoklu satır yorumu*
çıktı;
sıra: 1, değer: 1
sıra: 2, değer: 2
sıra: 3, değer: true
sıra: 4, değer: table: 61A60C90
]]

ancak ipairs, objelerde çalışmaz

not: obje de bir tablodur ancak objeler, listelerin aksine key&value mantığını kullanırlar
Kod
-- basit bir obje
local object =
{
    cache = {},
    online_players = -4,
    server_description = "tr/tofaş/+4214214 araç/gelişmiş modifiye sistemi/türkiyenin en iyi sunucusu blabla"
}

for index, value in ipairs(object)
do
    print("sıra: "..index, "değer: "..value)
end
-- hiçbir şey yazdırmayacak, çünkü ipairs sadece index'i (sırası) olan verileri döndürür, yani listelerde

objelerdeki değerleri döndürmek için abisi olan pairs'ı kullanabilirsin, pairs hem objelerde hem de listelerde çalışır

not: önceki kodların devamı
Kod
-- başta oluşturduğumuz basit array'i, pairs döngüsüne alalım
for index, value in pairs(array)
do
     print("sıra: "..index, " değer: "..value)
end
--[[
çıktı;

sıra: 1, değer: 1
sıra: 2, değer: 2
sıra: 3, değer: true
sıra: 4, değer: table: 61A60C90
]]

Kod
-- key = listedeki ismi, value = değeri
for key, value in pairs(object)
do
     print("isim: "..key, "değer:"..value)
end
--[[
çıktı;

isim: cache değer: table: yinebirkaçsayıveharf
isim: online_players değer: -4
isim: server_description değer: tr/tofaş/+4214214 araç/gelişmiş modifiye sistemi/türkiyenin en iyi sunucusu blabla
]]

eğer istersen objeyi ve listeyi beraber kullanabilirsin, tşk Lua
Kod
`
local very_important_table =
{
    "wicky",
     wicky = "eğweğwğe",
     4,
     5,
     2414215124321,
     ["ULAN BANA BAK KETÖCÜ"] = false,
     [false] = false, -- yeah, now it's big brain time
     true,
     "sa adminlik ne kadar?",
}

-- ipairs döngüsü
for i, v in ipairs(very_important_table)
do
    print("sıra: "..i, "değer: "..v)
end
--[[
çıktı:
sıra: 1 değer: "wicky"
sıra: 2 değer: 4,
sıra: 3 değer: 5,
sıra: 4 değer: 2414215124321,
sıra: 5 değer: true,
sıra: 6 değer: sa adminlik ne kadar?
]]

-- pairs döngüsü
for k, v in pairs(very_important_table)
do
    print("isim: "..k, "değer: "..v)
end
--[[
çıktı:
isim: 1 değer: wicky
isim: wicky değer: "eğweğwğe",
isim: 2 değer: 4
isim: 3 değer: 5
isim: 4 değer: 2414215124321
isim: ULAN BANA BAK KETÖCÜ değer: false,
isim: false değer: false
isim: 5 değer: true
isim: 6 değer: sa adminlik ne kadar?
]]

mantıklarını daha iyi anlamak için tabloları anlamalısın, tabloları anladıktan sonra bu döngüleri çok kolay anlarsın

not: ipairs ve pairs bir fonksiyon olduğu için döngüleri çok az yavaşlatabilirler, ufak bir hızlandırma yapmak istersen;
Kod
-- sadece ipairs yerine kullanabilirsin, pairs yerine kullanamazsın
-- i = index, v = value

-- 1'den başla ve listenin uzunluğuna kadar say
for i=1, #array -- # işareti bir listenin ve ya string'in uzunluğunu döndürür, objelerde çalışmaz
do
     local v = array[i] -- listenin *i* sırasındaki değeri al
     print(v) -- ve yazdır
end
--[[
1,
2,
true,
table: yinesayılar
]]

basit hız testi:
10000x
isimhız
ipairs807ms
pairs637ms
for631ms

for;
Linki görebilmek için Kayıt olun yada Giriş yapın.

eksikleri olabilir, pek dikkat etmedim ama yeteri kadar açıklamışımdır diye umuyorum
son not: döngülerdeki 'index, value' yerlerine özel karakter içermemek şartıyla istediğini yazabilirsin, onlar da bir değişkendir aslında
« Son Düzenleme: 13 Mayıs 2021, 05:20:55 Gönderen: wicky »
 
Mesajı Beğenenler: chantevuitton