我有一个数组和一个返回给定值的值的函数。最终我想创建一个hashmap,它将数组的值作为键值,并将f(key_value)的结果作为值。是否有一种干净、简单的方法,类似于数组的每个/映射,使用block来执行此操作?等价于hsh={}[1,2,3,4].eachdo|x|hsh[x]=f(x)end但看起来更像这个,因为它很简单而且只有一行?results=array.map{|x|f(x)} 最佳答案 请注意,从Ruby2.1.0开始,您还可以使用Array#to_h,像这样:[1,2,3,4].map{|x|[x,f(x)]}.
我有以下格式的数据结构:data_hash=[{price:1,count:3},{price:2,count:3},{price:3,count:3}]有没有一种有效的方法来获取:price的值作为[1,2,3]的数组? 最佳答案 首先,如果您使用的是rubyarray=[{:price=>1,:count=>3},{:price=>2,:count=>3},{:price=>3,:count=>3}]然后得到你需要的:array.map{|x|x[:price]} 关于ruby-
有没有一种快速的方法来获取Ruby数组中的所有其他条目?奇数或偶数条目值中包含0。我希望能够像这样使用它:array1+=array2.odd_values或putsarray2.odd_values.join("-")例如更新这正是我所追求的,但我确信还有更短的版本。array1.each_with_indexdo|item,index|if(index%2==0)thenarray2.push(item)endend 最佳答案 a=('a'..'z').to_aa.values_at(*a.each_index.select{|
我知道我可以执行以下操作,而且只有3行:class但是出于好奇,有没有更简单的方法(没有分号),比如:class_alias:generate,:new 最佳答案 从Ruby1.9开始,您可以使用singleton_class方法访问类的单例对象。这样您还可以访问alias_method方法。该方法本身是私有(private)的,因此您需要使用send调用它。这是你的一个类轮:singleton_class.send(:alias_method,:generate,:new)不过请记住,alias在这里不起作用。
我正在测试一些从环境变量中提取其配置的代码(在生产环境中由Heroku配置变量设置,对于本地开发我使用foreman)。使用RSpec测试此类代码的最佳方法是什么?我想到了这个:before:eachdoENV.stub(:[]).with("AWS_ACCESS_KEY_ID").and_return("asdf")ENV.stub(:[]).with("AWS_SECRET_ACCESS_KEY").and_return("secret")end如果您不需要测试环境变量的不同值,我想您可以改为在spec_helper中设置它们。 最佳答案
有没有比这更短的方法来找到满足某些条件的数组中的第一个元素:my_array[my_array.index{|x|x.some_test}] 最佳答案 试试这个:my_array.find{|x|x.some_test}或者这里有一个捷径(感谢@LarsHaugseth的提醒)my_array.find(&:some_test) 关于ruby-具有条件的数组的第一个元素,我们在StackOverflow上找到一个类似的问题: https://stackover
如何在Ruby中比较两个字符串或数组? 最佳答案 对于数组,使用减号运算符。例如:>>foo=[1,2,3]=>[1,2,3]>>goo=[2,3,4]=>[2,3,4]>>foo-goo=>[1]这里的最后一行删除了foo中也存在于goo中的所有内容,只留下元素1。我不知道如何对两个字符串执行此操作,但是直到有人知道关于它的帖子,你可以将每个字符串转换将字符串转换为数组,使用减号运算符,然后将结果转换回来。 关于ruby-diff一个ruby字符串或数组,我们在StackOverf
我想要一个每5分钟执行一次的方法,我为ruby(cron)实现了whenever。但它不起作用。我认为我的方法不可访问。我要执行的方法位于一个类中。我认为我必须将该方法设为静态,以便我可以使用MyClass.MyMethod访问它。但是我找不到正确的语法,或者我找错地方了。日程.rbevery5.minutesdorunner"Ping.checkPings"end平.rbdefcheckPingsgate=Net::Ping::External.new("10.10.1.1")@monitor_ping=Ping.new()ifgate.ping?MonitorPing.WAN=
这个问题在这里已经有了答案:HowtochunkanarrayinRuby(2个答案)关闭4年前。我需要一种方法来将数组拆分为精确数量且大小大致相等的较小数组。谁有办法做到这一点?例如a=[1,2,3,4,5,6,7,8,9,10,11,12,13]groups=a.method_i_need(3)groups.inspect=>[[1,2,3,4,5],[6,7,8,9],[10,11,12,13]]Notethatthisisanentirelyseparateproblemfromdividinganarrayintochunks,becausea.each_slice(3).t
obj=SomeObject.newdefobj.new_method"dosomethings"endputsobj.new_method>"dosomethings"这工作正常。但是,我需要在现有方法中做同样的事情:defsome_random_methoddefobj.new_method"dosomethings"endend也可以正常工作,但是在一个方法中包含一个方法看起来很糟糕。问题是,有没有其他方法可以添加这样的方法? 最佳答案 在ruby1.9+中,使用define_singleton_method有更好的方法,