SORU
6 Mayıs 2009, ÇARŞAMBA


nasıl Lua dizede tek karakterleri yineleme yapmak için?

Lua bir dize var ve tek tek karakter yineleme yapmak istiyorum. Ama denedim kod çalışıyor ve resmi el sadece alt dizeleri bulmak ve değiştirmek için nasıl gösterir :(

str = "abcd"
for char in str do -- error
  print( char )
end

for i = 1, str:len() do
  print( str[ i ] ) -- nil
end

CEVAP
7 Mayıs 2009, PERŞEMBE


Lua 5.1, yollar bir kaç dize bu karakterlerin yineleme yapabilirsiniz.

Temel döngü olur:

for i = 1, #str do
    local c = str:sub(i,i)
    -- do something with c
end

Ama daha verimli string.gmatch() ile bir desen karakterler üzerinde bir yineleyici elde etmek için kullanmak olabilir:

for c in str:gmatch"." do
    -- do something with c
end

Hatta string.gsub() her char için bir işlevi çağırmak için kullanın:

str:gsub(".", function(c)
    -- do something with c
end)

Yukarıdaki tüm, ben aldım avantajı olması string modül otomatik olarak bir metatable için tüm dize değerlerini, yani fonksiyonları çağrılabilir üyeleri olarak kullanma : gösterim. Ayrıca (5.1, IIRC yeni) # dize uzunluğunu almak için kullandım.

Uygulamanız için en iyi cevap faktörlerin çok bağlıdır, ve kriterler eğer performans önemli ise arkadaşın.

Değerlendirmek isteyebilirsiniznedensana bunlar üzerinde karakterler, ve bakmak için bir düzenli ifade modülleri onun bağlı Lua, ya da modern bir yaklaşım içine bak Roberto'nun lpeg modül olan uygular Ayrıştırma İfade Grammers için Lua.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
Lua

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • maxman.tv

    maxman.tv

    29 EKİM 2013
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006