草庐IT

Ruby Hash - 按值排序和打印键

这是我的哈希。=>{"f11"=>1,"f12"=>3,"f13"=>3,"f07"=>5,"f10"=>1}我想按值从大到小排序,然后用键组成一个数组。=>["f07","f12","f13","f11","f10"] 最佳答案 这是给你的一句话(我爱ruby!):h.keys.sort{|a,b|h[b]h[a]}希望对您有所帮助! 关于RubyHash-按值排序和打印键,我们在StackOverflow上找到一个类似的问题: https://stacko

ruby - `Hash#reject!` 和 `Hash#reject` 与 `Hash#delete_if` 有何不同?

对于Ruby中的Hash,reject!和reject与delete_if有何不同?谁能用简单的代码片段解释它们之间的区别? 最佳答案 由于其他答案指的是Array#delete_if而不是Hash#delete_if,这似乎是你要问的,我想我应该澄清一下。正如其他人所指出的,reject和reject!的不同之处在于reject!版本就地修改哈希,而reject创建一个新的散列。同时,delete_if几乎与reject!相同。事实上,对于一个Array,reject!和delete_if完全是一样的。但是,对于Hash,它们略有

ruby - Hash 是否覆盖 Enumerable#map()?

鉴于map()是由Enumerable定义的,Hash#map如何yield两个变量到它的block?Hash是否覆盖Enumerable#map()?为了好玩,这里有一个小例子:ruby-1.9.2-p180:001>{"herp"=>"derp"}.map{|k,v|k+v}=>["herpderp"] 最佳答案 它不会覆盖mapHash.new.method(:map).owner#=>Enumerable它产生两个变量,收集到一个数组中classNumsincludeEnumerabledefeachyield1yield1

ruby - 为什么 monkeypatching Hash.new 不起作用?

我正在修补Ruby的Hash类。classHashalias_method:_initialize,:initializedefinitializeputs'Inmyhashclass'_initializeendend当我这样做Hash.new它按预期工作。但是假设我有一个接受Hash的函数。类似的东西,foo'a'=>'b'在这种情况下,我的Hash类没有被使用。我希望我的Hash类的initialize方法被调用。为什么会这样? 最佳答案 因为文字哈希不会调用Hash.new将调用的initialize方法。与Hash['a'

ruby - 遍历 Hash/Array 时区分 {k : :v} vs. [ :k, :v]

我需要在#each上实现回调。each的接收者可能是Array和Hash。所以,我有这样的代码:receiver.eachdo|k,v|casereceiverwhenHashthenputs"#{k}=#{v}"whenArraythenputs"[#{k},#{v}]"endend不过,接收方的检查很差劲。有没有办法接收/解释代码块参数[s]以清楚地区分以下情况:{a:1,b:2}对比[[:a,1],[:b,2]]我尝试了括号、单一参数、拼接参数。一切都只是得到一个大小为2的Array。我注定要坚持显式类型检查吗? 最佳答案 你

ruby - 为什么在某些情况下 Ruby 的 Hash#values 比 Hash#each_value 更快?

当我将each_value应用于哈希时,它比我使用values时花费的时间要长得多,即使each_value表面上避免了分配和复制一个数组。我写了一个简单的对比:require'benchmark/ips'some_hash=File.open('with_an.dat'){|f|Marshal.loadf}Benchmark.ipsdo|x|x.report"callingeach_value"dosome_hash.each_valueendx.report"callingvalues"dosome_hash.valuesendx.compare!endBenchmark.ipsd

ruby - 是否需要覆盖 hash 和 eql?在 Ruby 中覆盖 == 运算符时?

在Java和C#等语言中,如果要重写相等运算符,则还必须重写散列方法。Whenevera.equals(b),thena.hashCode()mustbesameasb.hashCode()据我所知,这些语言中的一些内部数据结构依赖于上述条件成立才能正常运行。我想知道在Ruby中是否也是如此。重写==操作符时是否需要重写对象的hash方法?听说重写==时需要重写eql?。这些声明背后的原因是什么?如果您不覆盖这些声明,会发生什么情况? 最佳答案 不,您不需要覆盖eql?和hash方法。但是,正如tadman提到的,您应该覆盖它们。你

Ruby Hash 破坏性与非破坏性方法

找不到以前的帖子来回答我的问题...我正在学习如何在Ruby中使用破坏性与非破坏性方法。我找到了我正在进行的练习的答案(破坏性地向散列值添加数字),但我想弄清楚为什么我的一些早期解决方案不起作用。这是有效的答案:defmodify_a_hash(the_hash,number_to_add_to_each_value)the_hash.each{|k,v|the_hash[k]=v+number_to_add_to_each_value}end这两个解决方案以非破坏性的方式返回(因为它们都使用“每个”,所以我不明白为什么。要制造破坏性的东西是上面的等号吗?):defmodify_a_h

ruby-on-rails - 如何从 url 查询参数中检查 rails params hash 是否包含双引号字符串?

我创建了一个GET端点来使用Rails为API提供服务。我希望能够检查用户何时为url中的查询参数传递双引号。因此,例如,用户可以通过传递带双引号或不带引号的查询参数来调用以下端点。如果在查询参数中找到双引号,我的应用程序预计会有不同的行为。localhost:8080/company/data.json?q="AmericaOnlineinUK"&size=10现在用户也可以像这样调用不带双引号的端点:localhost:8080/company/data.json?q=America+Online+in+UK&size=10或localhost:8080/company/data.

ruby-on-rails - Ruby Hash.merge 仅具有指定的键

我很确定我在Rails相关网站上看到了类似以下内容的内容:defmy_function(*opts)opts.require_keys(:first,:second,:third)end如果未指定require_keys中的其中一个键,或者如果有未指定的键,则会引发异常。我一直在浏览ActiveSupport,我想我可能正在寻找类似except的逆函数。.与编写自己的代码相比,我喜欢尝试使用尽可能多的框架,这就是我问何时知道如何自己实现相同功能的原因。:)目前我正在通过正常的merge例程来完成它,并确保我拥有我需要的一些IF。 最佳答案