2010-12-21 3 views
0

Comment définir un nombre fixe d'éléments d'un tableau dans Ruby.Comment définir un nombre fixe d'éléments de tableau dans Ruby

par ex. a=["a","b","c","d"] taille du tableau de réglage à 3 génèrerait

a=["a","b","cd"] 
+1

Pouvez-vous clarifier votre question? Voulez-vous dire que, dans votre exemple, les 3e et 4e éléments sont concaténés? – Dogweather

+0

Oui, ils sont concaténés, puisque je réduis le nombre d'éléments dans le tableau. – Dejan

Répondre

3
class Array 
    def squeeze(n, &p) 
    p = Proc.new {|xs| xs.join} unless p 
    arr = self[0..n-2] 
    arr << p.call(self[n-1..-1]) 
    end 
end 

a = ['a', 'b', 'c', 'd', 'e'] 
a.squeeze(3) # => ["a", "b", "cde"] 

Il a besoin de bornes de contrôle, mais vous voyez l'idée. Notez que la « combinaison » fonction peut être donnée comme argument de bloc:

[1, 2, 3, 4].squeeze(3) {|xs| xs.inject {|acc,x| acc+x}} # => [1, 2, 7] 
+0

C'est très bon, il n'y a pas d'implémentation native dans la classe Ruby Array qui fait cela, j'ai déjà vu quelque chose comme ça mais je ne le trouve plus. – Dejan

6

Si vous saviez les éléments étaient seulement des chaînes d'un seul caractère, vous pourriez faire quelque chose comme:

a.join.split '', 3 

Dans le cas contraire:

a[0..1] + [a[2..-1].join] 

Ou peut-être:

a[0..1] << a[2..-1].join 
+0

+1 pour # 1. Nice et concis sans bruit visuel. –

Questions connexes