Mam stan, w którym dostaję skrót
hash = {"_id"=>"4de7140772f8be03da000018", .....}
i chcę ten hash jako
hash = {"id"=>"4de7140772f8be03da000018", ......}
PS : Nie wiem, jakie są klucze w skrócie, są losowe, z każdym prefiksem „_” i nie chcę żadnych znaków podkreślenia
ruby-on-rails
ruby
ruby-on-rails-3
hash
Manish Das
źródło
źródło
_id
kluczyid
w szeregu dokumentów MongoDBOdpowiedzi:
źródło
hash.delete :old_key
zwraca, a usuwanie używa starego klucza. WOW, chcę to gdzieś wytatuować :-D Dziękiszyny Hash ma do tego standardową metodę:
http://api.rubyonrails.org/classes/Hash.html#method-i-transform_keys
UPD: metoda ruby 2.5
źródło
Jeśli wszystkie klucze są ciągami znaków i wszystkie mają przedrostek podkreślenia, możesz załatać skrót w tym miejscu:
k[1, k.length - 1]
Nieco łapie wszystkiek
z wyjątkiem pierwszego znaku. Jeśli chcesz kopię, to:Lub
Możesz także użyć,
sub
jeśli nie podoba ci sięk[]
notacja do wyodrębniania podłańcucha:A jeśli tylko niektóre klucze mają prefiks podkreślenia:
Podobne modyfikacje można wprowadzić dla wszystkich pozostałych wariantów powyżej, ale te dwa:
powinno być w porządku z kluczami, które nie mają prefiksów podkreślenia bez dodatkowych modyfikacji.
źródło
możesz to zrobić
To powinno działać w twoim przypadku!
źródło
Jeśli chcemy zmienić nazwę określonego klucza w skrócie, możemy to zrobić w następujący sposób:
Załóżmy, że mój skrót to
my_hash = {'test' => 'ruby hash demo'}
Teraz chcę zastąpić słowo „test” słowem „wiadomość”, a następnie:
my_hash['message'] = my_hash.delete('test')
źródło
hash[:new_key] = has[:old_key]
zamiast tego:hash[:dynamic_key] = hash[:_dynamic_key]
było jasne pytanie o wyrażenie regularne i nie prosty zamiennik skrótu.źródło
źródło
Poszedłem za przesadnie i wymyśliłem następujące rzeczy. Moją motywacją było dołączenie do klawiszy skrótu, aby uniknąć konfliktów zakresu podczas scalania / spłaszczania skrótów.
Przykłady
Rozszerz klasę mieszania
Dodaje metodę rekey do instancji Hash.
Przygotuj przykład
Przykład przycinania
Spłaszczanie i dołączanie „zakresu”
Jeśli przekażesz skrót z powrotem w celu ponownego wygenerowania, spowoduje to scalenie skrótu, co pozwala spłaszczyć kolekcje. To pozwala nam dodać zakres do naszych kluczy podczas spłaszczania skrótu, aby uniknąć zastąpienia klucza podczas scalania.
źródło
Poprzednie odpowiedzi są wystarczająco dobre, ale mogą aktualizować oryginalne dane. Jeśli nie chcesz, aby oryginalne dane zostały naruszone, możesz wypróbować mój kod.
Najpierw zignoruje klucz „_id”, a następnie połączy się ze zaktualizowanym.
źródło