草庐IT

Ruby 快速从散列的散列中创建一个数组?

好吧,如果我有一个散列的散列来表示这样的书:Books={"HarryPotter"=>{"Genre"=>Fantasy,"Author"=>"Rowling"},"LordoftheRings"=>{"Genre"=>Fantasy,"Author"=>"Tolkien"}...}有什么方法可以简洁地获得书籍散列中所有作者的数组?(如果为多本书列出了同一作者,我需要他们的名字在每本书的数组中一次,所以不必担心清除重复项)例如,我希望能够按以下方式使用它:list_authors(insert_expression_that_returns_array_of_authors_here

ruby - 如何将数组转换为以数组元素为散列键且所有散列值都设置为给定值的散列

使用Ruby2.1(使用ActiveSupport3.x,如果有帮助的话),我想像这样转换一个数组:[:apples,:bananas,:strawberries]变成这样的散列:{:apples=>20,:bananas=>20,:strawberries=>20}从技术上讲,这是可行的:array=[:apples,:bananas,:strawberries]hash=Hash[array.zip(Array.new(array.length,20))]#=>{:apples=>20,:bananas=>20,:strawberries=>20}但这看起来真的很笨拙,我觉得有一种

ruby - 先按值排序散列,然后按键排序

我有一个哈希[原文如此]:[["a",1],["b",1],["d",1],["k",1],["r",1],["f",2],["j",2],["o",2],["i",3],["s",3]]我希望输出按数字从小到大排序,然后按字母倒序排序:[["r",1],["k",1],["d",1],["b",1],["a",1],["o",2],["j",2],["f",2],["s",3],["i",3]]有办法吗?这是我的代码:defletter_counts(word)my_hash=Hash.new(0)word.split("").each{|word|my_hash[word]+=1}

ruby - 在 Ruby 中将字符串数组的数组转换为字符串和 float 的散列?

我有以下数组。>>gold_prices=>[["2011-01-11","134.91"],["2011-01-10","134.12"],["2011-01-07","133.58"],["2011-01-06","133.83"]]将每个子数组转换为:string=>float的散列的最干净的方法是什么? 最佳答案 >>gold_prices=Hash[gold_prices.map{|date,price|[date,price.to_f]}]=>{"2011-01-11"=>134.91,"2011-01-10"=>134

ruby - 在散列中查找任何大于特定值的值

假设我有这个散列{1=>4,2=>3,4=>1}现在我想做一个循环,我可以在其中找到任何大于3的值。我知道hash.values?3我可以找到值为3的对。但是我怎样才能找到大于等于3的所有值。鲁洛夫编辑1:我尝试在ruby​​中使用此伪代码。whiletherearesetsof3ones:removethesetfromthehash(h[1]-=3)sum1000tothescoreend 最佳答案 使用#select方法:{a:1,b:2,c:3}.select{|k,v|v>1}

ruby-on-rails - 带有默认值 : how to DRY? 的参数散列的 Ruby 方法

我有一个initialize方法,它接受一个散列来设置一些实例变量。这基本上就是我想要做的:classAdDEFAULT_PAGE='index'.freezeDEFAULT_CHANNEL='general'.freezeDEFAULT_AREA='general'.freezeattr_accessor:page,:area,:channeldefinitializeargs={}@page=args[:page]||DEFAULT_PAGE@area=args[:area]||DEFAULT_AREA@channel=args[:channel]||DEFAULT_CHANNEL

Ruby 散列值分组

我有一个包含学生姓名和标记的ruby​​哈希,如下所示。student_marks={"Alex"=>50,"Beth"=>54,"Matt"=>50}我正在寻找一种根据学生的分数对学生进行分组的解决方案。{50=>["Alex","Matt"],54=>["Beth"]}我试过group_by但它没有给我想要的结果。以下是使用group_by的结果。student_marks.group_by{|k,v|v}{50=>[["Alex",50],["Matt",50]],54=>[["Beth",54]]}提前致谢。 最佳答案 st

ruby - 为什么在转换为字符串然后转换为符号时,空数组和散列的处理方式不同?

在Ruby中,为什么这两个操作对于空数组和哈希是不同的?空数组:[].to_s.to_sym=>:[]空哈希:{}.to_s.to_sym=>:"{}" 最佳答案 它们并没有真正的不同,只是它们的显示方式不同。{字符不能作为符号的开头,因此用引号括起来。如果你想创建一个包含-的符号,你会做同样的事情,否则它会被解释为减法运算符。事实上,您可以进入IRB并测试引号是否真正影响交易品种。:[]==:"[]"#=>true所以,基本上,一个可以使用更短的形式,而另一个必须更冗长以便解析器可以理解。但两者在含义或形式上并无本质区别。

arrays - 合并两个不相等的数组进行散列

我需要帮助创建表示Ruby中两个数组的所有可能组合的散列。我有什么:numbers=[1,2]letters=['q','w','e','r']我需要什么:combination=[{number:1,letter:'q'},{number:1,letter:'w'},{number:1,letter:'e'},{number:1,letter:'r'},{number:2,letter:'q'},{number:2,letter:'w'},{number:2,letter:'e'},{number:2,letter:'r'}]重要提示:我永远不会知道“数字”或“字母”数组包含多少项(

Ruby:如何找到散列中最大值的键?

您好,我正在尝试在我的散列中找到最大值。我在谷歌中进行了搜索,发现了这段代码:deflargest_hash_key(hash)key=hash.sort{|a,b|a[1]b[1]}.lastputskeyendhash={"n"=>100,"m"=>100,"y"=>300,"d"=>200,"a"=>0}largest_hash_key(hash)在此代码中,“puts”打印最大的键和值e.xy300。那么,我如何修改代码才能找到最大值并将其放入to_s变量中? 最佳答案 这是O(n):h={"n"=>100,"m"=>100