Tag: 哈希

为什么Hash #select和Hash#reject将密钥传递给一元块?

我的理解是Hash#select和Hash#reject每次都会传递一个键数组及其值[key, value]作为每个迭代的单个块参数,你可以使用隐式破坏性赋值直接在块中选择它们: {a: 1, b: 2}.select{|k, v| k == :a} # => {:a => 1} {a: 1, b: 2}.reject{|k, v| v == 1} # => {:b => 2} 或明确的破坏性赋值: {a: 1, b: 2}.select{|(k, v)| k == :a} # => {:a => 1} 我期望,当我传递一个一元块时,整个[key, value]数组将被传递,但实际上,似乎键被传递: {a: 1}.select{|e| pe} # => Prints `:a` (I expected `[:a, 1]`) […]

使用虚线路径密钥字符串访问Ruby哈希

Rails I18n库将YAML文件转换为可通过使用t()函数的虚线路径调用访问的数据结构。 t(‘one.two.three.four’) 有没有人知道如何用Ruby Hash做到这一点? 或者只能直接通过YAML对象?

Marshal ruby​​ hash with default proc – 删除默认的proc?

我有一个带有默认触发器的Hash,我想将Marshal设置为一个文件,但是默认的proc会阻止我这样做。 而不是编写我自己的_dump和_load方法,而不是删除默认的proc而不是? 在我编组时,我永远不会再需要默认的proc。

如何在Rails中生成唯一的请求ID?

我的记录器需要一个唯一的请求ID,因此我可以跟踪日志文件中的每个请求。 到目前为止我得到了这个 REQUEST_ID = Digest::MD5.hexdigest(Time.now.to_f.to_s + $PID.to_s) 问题是我不知道在哪里放这个。 我尝试将它放在我的自定义记录器文件中,在类外面。 但它必须被缓存或其他东西,因为我总是得到相同的哈希。 有任何想法吗? 注意。 我正在使用Rails 3和Passenger独立版 更新: Rails 3.2:uuid标签不起作用。 看看日志的格式是多么糟糕: [0909413851b79676cb06e0842d21c466] [127.0.0.1] Started HEAD “/” for 127.0.0.1 at Tue Feb 21 14:08:25 -0300 2012 [0909413851b79676cb06e0842d21c466] [127.0.0.1] Processing by PagesController#home as HTML [0909413851b79676cb06e0842d21c466] [127.0.0.1] bla [0909413851b79676cb06e0842d21c466] [127.0.0.1] Rendered pages/home.html.erb within layouts/application (2.0ms) 在生产中,这将是一个烂摊子。 请注意第一行之后的换行符? 现在想象一下在每秒处理许多请求的服务器中日志的样子。 将请求与URI关联起来很困难

在Ruby哈希中查找重复项

我有一个哈希数组,我需要根据哈希值之间的一个匹配值来查找和存储匹配项。 a = [{:id => 1, :name => “Jim”, :email => “jim@jim.jim”}, {:id => 2, :name => “Paul”, :email => “paul@paul.paul”}, {:id => 3, :name => “Tom”, :email => “tom@tom.tom”}, {:id => 1, :name => “Jim”, :email => “jim@jim.jim”}, {:id => 5, :name => “Tom”, :email => “tom@tom.tom”}, {:id => 6, :name => “Jim”, :email […]

如何调用哈希值的方法?

以前,我询问了一种在给定条件下执行方法的巧妙方法 “ Ruby是一种在条件上执行函数的聪明方法 。” 然而,解决方案和响应时间很长,在实现时,拥有lambda的哈希很快就会变得难看。 所以我开始尝试。 以下代码有效: def a() puts “hello world” end some_hash = { 0 => a() } some_hash[0] 但是,如果我将它包装在一个类中它停止工作: class A @a = { 0 => a()} def a() puts “hello world” end def b() @a[0] end end d = A.new() db() 我不明白为什么它应该停止工作,任何人都可以建议如何使它工作?

如何使用splat和可选的哈希同时在ruby中定义方法?

我能够定义这样的方法: def test(id, *ary, hash_params) # Do stuff here end 但这使得hash_params参数成为hash_params参数。 这些也不起作用: def t(id, *ary, hash_params=nil) # SyntaxError: unexpected ‘=’, expecting ‘)’ def t(id, *ary, hash_params={}) # SyntaxError: unexpected ‘=’, expecting ‘)’ 有没有办法让它可选?

为什么Ruby将FixNum n哈希为2n + 1?

为什么Ruby将整数n散列为2 * n + 1 ? >> [0,1,2,3].each {|x| puts x.hash} 1 3 5 7 我可以看到你并不总是需要复杂的哈希值,特别是对于简单的对象。 但是为什么’double和add 1’规则而不是做Python所做的,那就是将整数哈希给自己? >>> map(hash,[0,1,2,3]) [0, 1, 2, 3] 有原因吗?

在Ruby中使用Hash反转?

我有一个格式的哈希: {key1 => [a, b, c], key2 => [d, e, f]} 我想最终得到: { a => key1, b => key1, c => key1, d => key2 … } 实现这一目标的最简单方法是什么? 我正在使用Ruby on Rails。 UPDATE 好吧,我设法从服务器日志中提取真实对象,它是通过AJAX推送的。 Parameters: {“status”=>{“1″=>[“1”, “14”], “2”=>[“7”, “12”, “8”, “13”]}}

为什么Hash.new({})会隐藏哈希成员?

好的,所以我想创建一个散列,其中有一个空散列作为默认值。 我知道,有点奇怪,但是我想我觉得它可能有用。 所以这就是我做的: >> a = Hash.new({}) => {} >> a[:a][:b] = 5 => 5 >> a => {} >> a[:a] => {:b=>5} >> a.keys => [] >> a.size => 0 >> a[:a].size => 1 换句话说,当我检查哈希时,我没有看到哈希成员,但我可以通过它的密钥访问它。 这是预期的行为吗? 这里发生了什么? 顺便说一下,这是Ruby 1.9.1,还没有尝试过早期版本。 编辑:简化示例,因为它不必是散列哈希哈希…