2009-04-29 26 views
18

Şunun gibi bir dizim var:Ruby: Bir dizinin öğelerini önekle nasıl birleştiririm?

["marblecake", "also", "the", 1337] 

Belirli bir dizeyle öntanımlı dizinin her öğesini içeren bir dizeyi geri almak istiyorum, sonra başka bir belirtilen dizeyle birleştirildi. Örneğin,

["marblecake", "also", "the", 1337].join_with_prefix("%", "__") 

# => %marblecake__%also__%the__%1337 

ile sonuçlanmalıdır. Bunu nasıl yapabilirim?

cevap

38

o zaman bu tek satırlık o

a.map { |k| "%#{k}" }.join("_") 

Kolayca kendi bir fonksiyonu bu koyabilirsiniz yapacak Örneğinizde olduğu gibi bir dizide.

'!' Haritanın sürümü (map!) diziyi yerinde değiştirir - belki sizin niyetiniz değil. Yukarıdaki öneri gereğince

+12

Neden "map" yıkıcı, yerinde sürümünü kullanıyorsunuz? OP'nin kodunun neye benzediğine bağlı olarak, istenmeyen bazı yan etkileri olabilir. –

+0

Bu hile yaptı. Çok sağol Cody. –

+0

Jason: Burada yalnızca ilkel/diziler saklanıyor. Tavsiye edeceğiniz bir alternatif var mı? –

2

: Bu today.I bir çözüm arıyordu

class Array 
    def join_with_prefix(prefix,separator) 
    self.collect {|e| prefix.to_s + e }.join(separator) 
    end 
end 

p ['ab','cd','ef'].join_with_prefix('%','__') 
=> "%ab__%cd__%ef"
+2

Bu, bir dizi dizeye katılmaya çalıştığınızı varsayar - örneğin, "+ e" parçasından bir dizi tamsayıya sahip olsaydınız, "+" bölümünün olduğu gibi başarısız olur. dize + tam sayı. Daha iyi bir yaklaşım, dize birleştirme işleminde, "# {e}" dizgisi ile çift tırnaklı bir dizgede, elemanınıza dolaylı olarak yerleştirilecek olan bir dizgi dizgisi yapmaktır. Bu nedenle: self.collect {| e | "# {prefix} # {e}"} .join (ayırıcı) Daha esnek. –

+0

Ya da sadece 'prefix.to_s + e.to_s' – rampion

-1

bu question.This benim çözüm oldu buldum. Bu çok eski bir soru olmasına rağmen

array = ["marblecake", "also", "the", 1337]; 
arrayString = '' 

array.each{|x| arrayString += "%" + x + "__"} 
+0

yapabiliriz Ne yazık ki bu sadece dizeleri dizileri ile çalışır. –

10

, bunu eklemek istiyorum:

a.any? && "%".+(a.join("__%")) 
+0

Bu akıllı bir çözüm! Bunu çok beğendim :) –

+0

'a' boşsa, bu yalnızca'% 'döner – xiaoboa

İlgili konular