Archives mensuelles : janvier 2017

Modifier la clé d’un Hash en Ruby

Si vous tentez de modifier la clé d’un Hash en Ruby de façon pourtant « instinctive », vous allez rencontrer des problèmes…


h = {"cle" => "val"}
h.keys[0].capitalize!

16443237_1865407753716656_526630943_n

Ruby n’est pas très content et c’est un euphémisme !

RuntimeError: can't modify frozen String

Pour remédier à ça, il suffit de passer par delete
h = {"cle" => "val"}
h[h.keys[0].capitalize] = h.delete(h.keys[0])

L’appel à delete va renvoyer la valeur associée à votre clé passée en paramètre (h.keys[0]) et de ce fait, la mettre en face de votre nouvelle clé, qui est ni plus ni moins que l’ancienne avec une majuscule. L’ancienne, elle, a bien évidemment disparu avec l’appel à delete.