代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

在Ruby中,一些将哈希值数组中的所有内容从float转换为int的好方法?

  •  1
  • nonopolarity  · 技术社区  · 14 年前

    我有一个哈希数组,值都是浮点数。

    Ruby中有哪些好方法可以将它们全部转换为int?

    我现在有这种方法,但我想知道还有哪些方法更优雅或更清晰:

    analytics.map {|e| e.keys.each {|k| e[k] = e[k].to_i}; e}
    

    更新: 这是一段代码:

    > @analytics = [{:a => 1.1, :b => 123.456}, {'c' => 765.432}]
     => [{:a=>1.1, :b=>123.456}, {"c"=>765.432}] 
    
    > @analytics.map {|e| e.keys.each {|k| e[k] = e[k].to_i}; e} 
     => [{:a=>1, :b=>123}, {"c"=>765}] 
    
    > @analytics
     => [{:a=>1, :b=>123}, {"c"=>765}]
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   Jörg W Mittag    14 年前
    analytics.map {|h| Hash[h.map {|k, v| [k, v.to_i] }] }
    

    看起来有点整洁。

    一般来说,每当我发现自己在处理几个嵌套迭代器时,我都会尝试重构我的对象模型,这样我就可以处理实际的对象,而不仅仅是一个由嵌套数组和散列组成的扭曲迷宫。这似乎就在栅栏上。

    毕竟,Ruby是一种面向对象的编程语言,而不是一种面向哈希的编程语言。

        2
  •  1
  •   steenslag    14 年前

    就位:

    a = [{:a=>1.1, :b=>2.1},{:a=>3.0, :b=>4.1}]
    a.each {|h| h.each_pair {|k,v| h[k] = v.to_i}}
    p a
    # => [{:a=>1, :b=>2}, {:a=>3, :b=>4}]
    
        3
  •  1
  •   tokland    14 年前

    这是一个具有fp样式(无就地修改)的解决方案,使用 Enumerate#mash Facets :

    analytics.map { |h| h.mash { |key, value| [key, value.to_i] } }
    

    Enumerable#mash 是到哈希的map+。查看更多信息 here .