ランダムなサイズのハッシュを持っています。"100"
のような値があります。これは整数に変換したいものです。私はvalue.to_i if value.to_i.to_s == value
を使ってこれを行うことができると知っていますが、値が文字列か配列(ハッシュまたは文字列)、または別のハッシュのいずれかになることを考慮して、再帰的にハッシュを行う方法がわかりません。すべての数値文字列をRubyハッシュの整数に再帰的に変換します。
答えて
これは非常に簡単な再帰的実装です(ただし、配列とハッシュの両方を処理する必要はありません)。
def fixnumify obj
if obj.respond_to? :to_i
# If we can cast it to a Fixnum, do it.
obj.to_i
elsif obj.is_a? Array
# If it's an Array, use Enumerable#map to recursively call this method
# on each item.
obj.map {|item| fixnumify item }
elsif obj.is_a? Hash
# If it's a Hash, recursively call this method on each value.
obj.merge(obj) {|k, val| fixnumify val }
else
# If for some reason we run into something else, just return
# it unmodified; alternatively you could throw an exception.
obj
end
end
そして、ちょっと、それも動作します:
hsh = { :a => '1',
:b => '2',
:c => { :d => '3',
:e => [ 4, '5', { :f => '6' } ]
},
:g => 7,
:h => [],
:i => {}
}
fixnumify hsh
# => {:a=>1, :b=>2, :c=>{:d=>3, :e=>[4, 5, {:f=>6}]}, :g=>7, :h=>[], :i=>{}}
ありがとう、それは動作します。しかし、最初のifをif obj.respond_toに変更しなければなりませんでしたか? :to_iとobj.to_i.to_s == obj'という文字列を含むことができます。それに応じて回答を編集することができます。再度、感謝します! –
'obj.merge(obj){| k、val | fixnumify val} '=>'ハッシュ[obj.map {| k、v | [k、fixnumify(val)] '?ちょうどそれがより速くすることができます卒業している。 –
それは@VictorMorozかもしれませんが、私は徐々に推測するしかありません。私はいつもハッシュ[]を忘れています。ありがとう! –
は、これは私のヘルパークラスです。単なる数値(整数または浮動小数点数)の文字列を変換するだけです。
module Helpers
class Number
class << self
def convert(object)
case object
when String
begin
numeric(object)
rescue StandardError
object
end
when Array
object.map { |i| convert i }
when Hash
object.merge(object) { |_k, v| convert v }
else
object
end
end # convert
private
def numeric(object)
Integer(object)
rescue
Float(object)
end # numeric
end # << self
end # Number
end # Helpers
Helpers::Number.convert [{a: ["1", "22sd"]}, 2, ['1.3', {b: "c"}]]
#=> [{:a=>[1, "22sd"]}, 2, [1.3, {:b=>"c"}]]
- 1. Rubyで文字列をハッシュ記号と整数に変換する
- 2. 整数文字列値へのハッシュ
- 3. 文字列の文字数を再帰的に計算する
- 4. Rubyドル整数を文字列に変換する
- 5. Rubyで文字列を整数に変換する方法
- 6. 文字列をそのascii値の整数に変換する
- 7. 英数字の文字列を整数に変換していますか?
- 8. 数値の配列を文字に変換するruby
- 9. 数字の文字配列を整数に変換する
- 10. すべての.htaccessファイルに文字列を再帰的にgrep
- 11. Ruby Array:整数を文字列に変換
- 12. 文字列内の数字をハッシュに変換する方法
- 13. Rubyの配列、ハッシュ、整数
- 14. Rubyでインポートするときに、文字列の負の数値を整数に変換する際のエラー
- 15. 文字列を整数に変換
- 16. 文字列を整数に変換して代数的に解くCプログラム
- 17. 文字列を整数に変換してテストするには?
- 18. ruby on rail再帰的サブ文字列
- 19. 数字を含む文字列を整数に変換する
- 20. 数値の文字表現を整数に変換する
- 21. 文字列を数値に変換して別の数値を返します
- 22. JavaのJSONパーサーが自動的に文字列を数値/整数に変換します
- 23. すべてのImmutable.jsオブジェクトの整数キーを文字列に自動的に変換できますか?
- 24. Ruby:文字列のすべての整数を+1で増やします。
- 25. Pentahoケトルの文字列から整数/数値への変換
- 26. x86 NASMは文字列を整数に変換します
- 27. Jackson JSONは整数を文字列に変換します
- 28. 整数の文字列を分離して文字に変換する方法
- 29. 文字列をギザギザの整数の配列に変換する
- 30. Ruby文字列を.to_iなしで整数に変換する方法
郵便例 –
また、あなたの質問に答える:?#is_kind_of 'で使用する再帰を' ' –
obj.to_i.to_s == obj'奇妙に思えます。同じ整数値に対して異なる文字列表現が存在する可能性があります。 "1_000_000"または "019"。 –