2010-08-19 36 views
15

Dizgiler dizisini bir dizeye dönüştürmek için en iyi deyimsel (en temiz) yoldur ve her öğe için kapalı tırnak işaretleri tutar. Bundan başka deyişle
:Ruby'de bir dizi dizgiyi düzleştirme

a = ["file 1.txt", "file 2.txt", "file 3.txt"] 

Bu

"'file 1.txt' 'file 2.txt' 'file 3.txt'" 

Tek ve çift tırnak burada kendi aralarında değiştirilebilmektedir almak gerekiyordu. Bildiğim en iyi yol harita kullanmak ve enjekte etmek/azaltmak.

örn: a.map{|dir| "'" + dir + "'"}.join(' ')
eg2: a.reduce("'"){|acc, dir| acc += dir+"' "}

Performans geçici dize oluşturma (+ operatörü) kaçınarak geliştirilebilir. Ama asıl sorum bu değil. Aynı sonucu elde etmenin daha temiz bir yolu var mı?

+0

Eğer dizi üyeleri içindeki tırnak kaçmak gerekir mi? –

+0

Hayır, sadece başlangıç ​​ve bitiş tırnaklarını yukarıda gösterildiği gibi tutmak için. Gösterilen alıntıların dizelerin kendisinde olmadığını fark ettim ve bu yüzden dizide yalnızca birleştirme yaparken sıyrıldılar. – Alkaline

cevap

27

Daha kısa zaman basit anlamına gelmez. İlk örneğiniz gereksiz bir şekilde karmaşık olmaksızın kısa, okunabilir ve kolayca değiştirilebilir.

a.map { |s| "'#{s}'" }.join(' ') 
13

?'+a*"' '"+?' 
+1

Tüm bu alıntılar titiz, ancak şu ana kadar en iyi cevabı aldınız. – Alkaline

+3

Bunun kötü olduğunu söylemiyorum ama doğal olarak da tam olarak okunmuyor. Tecrübeli bir Rubyistin bile "Huh" yapmasını sağlayacak bir şey mi? ilk bakışta. – Chuck

+0

İlginç golf topu! – captainpete

1

bu deneyin golf

"'#{a.join("' '")}'" 

Veya eğer deneyin:

"'" + a.join("' '") + "'" 
0
"'"+a*"' '"+"'" 

veya

"'#{a*"' '"}'" 

veya

a.to_s[1...-1].gsub /",?/,"'"