Tag: hash

有没有Ruby相当于PHP的提取?

我可以创建一个块来提取哈希元素并将它们转换为局部变量,但我想知道原始方法是否已经存在。 像这样的东西: extract({ :foo => ‘bar’, :foo2 => ‘bar2’ }) puts foo # ‘bar’ puts foo2 # ‘bar2’ 请注意,密钥是私有的,并且范围需要保持在本地。

Ruby 1.8:散列#sort不返回散列但是数组(更好的方法是这样做吗?)

在Ruby 1.8的某些场景中。 如果我有哈希 # k is name, v is order foo = { “Jim” => 1, “bar” => 1, “joe” => 2} sorted_by_values = foo.sort {|a, b| a[1] b[1]} #sorted_by_values is an array of array, it’s no longer a hash! sorted_by_values.keys.join ‘,’ 我的解决方法是为Array类创建方法to_hash 。 class Array def to_hash(&block) Hash[*self.collect { |k, v| [k, v] }.flatten] […]

Rails哈希值具有未知键和强参数

我有一个rails应用程序,它在一个名为properties的字段中存储一个序列化哈希。 虽然哈希键是未知的,但我不知道如何通过强参数来允许它。 谷歌搜索时,我发现了这个: https : //github.com/rails/rails/issues/9454 ,但我无法确切地知道解决方案是什么。 所以基本上,我的问题是:如何配置强参数以允许具有未知密钥的哈希? 谢谢大家的帮助!

关键字参数在Ruby中解包(splat)

下面发生的事情对我来说似乎有点奇怪。 def f(a, b) puts “#{a} :: #{b}” end f(*[1, 2], **{}) # prints “1 :: 2” hash = {} f(*[1, 2], **hash) ArgumentError: wrong number of arguments (3 for 2) f(*[1, 2], **Hash.new) ArgumentError: wrong number of arguments (3 for 2) 这是编译器优化function吗?

从字符串生成嵌套哈希并在ruby中深度合并

我在JSON格式的数据库中有一个哈希。 例如 { “one” => { “two” => { “three” => {} } } } 我需要从字符串生成这个。 上面的例子将从字符串“one.two.three”生成。 首先,我该怎么做? 第二部分问题。 我将收到多个字符串 – 每个字符串构建在最后一个字符串上。 所以如果我得到“one.two.three”,然后是“one.two.four”,我就是这样: { “one” => { “two” => { “three” => {}, “four” => {} } } } 如果我两次获得“one.two.three”,我希望最新的“三”值覆盖那里的内容。 字符串也可以是任何长度(例如“one.two.three.four.five”或只是“one”)。 希望这有道理吗?

Ruby哈希相当于JavaScript的对象初始化程序ES6的简写

在JavaScript ES6中,我们可以创建对象,其中变量名称变为如下所示的键: > let a = ‘aaa’ ‘aaa’ > let b = ‘bbb’ ‘bbb’ > { a, b } { a:”aaa”, b:”bbb” } Ruby有没有相当于哈希的东西? 澄清:显然这个问题与速记符号有关。 我正在寻找{a,b}而不是{a:a,b:b} 。

使用nokogiri将嵌套哈希转换为XML

我有很多级别的嵌套哈希,如: { :foo => ‘bar’, :foo1 => { :foo2 => ‘bar2’, :foo3 => ‘bar3’, :foo4 => { :foo5 => ‘bar5’ }}} 我怎样才能将它们转换成这样的XML?: bar bar2 bar3 bar5 我已经尝试了xml.send方法,但它将上面嵌套的哈希转换为: bar

如何以递归方式从(YAML)哈希中删除具有空值的所有键?

我一直试图摆脱我的YAML文件中具有空(空白)值或空哈希值作为值的所有哈希键。 这个早期的post帮助我几乎把它弄好了,但是当有足够深的嵌套时,递归的单行会使我的YAML转储空闲哈希。 我真的很感激任何帮助。 谢谢! proc = Proc.new { |k, v| (v.kind_of?(Hash) && !v.empty? ) ? (v.delete_if(&proc); nil) : v.blank? } hash = {“x”=>{“m”=>{“n”=>{}}}, ‘y’ => ‘content’} hash.delete_if(&proc) 实际输出 {“x”=>{“m”=>{}}, “y”=>”content”} 期望的输出 {“y”=>”content”}

在任意深度访问嵌套哈希值的最ruby方法是什么?

给出如下的哈希: AppConfig = { ‘service’ => { ‘key’ => ‘abcdefg’, ‘secret’ => ‘secret_abcdefg’ }, ‘other’ => { ‘service’ => { ‘key’ => ‘cred_abcdefg’, ‘secret’ => ‘cred_secret_abcdefg’ } } } 在某些情况下我需要一个函数来返回服务/密钥,在其他情况下我需要其他/ service / key。 一种简单的方法是传入散列和一组键,如下所示: def val_for(hash, array_of_key_names) h = hash array_of_key_names.each { |k| h = h[k] } h end 这样调用会导致’cred_secret_abcdefg’: val_for(AppConfig, %w[other service secret]) 似乎应该有比我在val_for()中写的更好的方法。

Ruby – 关键字参数 – 您可以将所有关键字参数视为哈希吗? 怎么样?

我有一个看起来像这样的方法: def method(:name => nil, :color => nil, shoe_size => nil) SomeOtherObject.some_other_method(THE HASH THAT THOSE KEYWORD ARGUMENTS WOULD MAKE) end 对于任何给定的调用,我可以接受任意值的任意组合。 我喜欢命名参数,因为我可以查看方法的签名以查看可用的选项。 我不知道的是,上面的代码示例中是否有我用大写字母描述的快捷方式。 回到过去,它曾经是: def method(opts) SomeOtherObject.some_other_method(opts) end 优雅,简单,几乎作弊。 这些关键字参数是否有快捷方式,还是我必须在方法调用中重构我的选项哈希?