(1..4).collectdo|x|nextifx==3x+1end#=>[2,3,nil,5]#desired=>[2,3,5]如果满足next的条件,collect会将nil放入数组中,而我想要做的是将没有元素。这是否可以不调用delete_if{|x|x==nil}在返回的数组上?我的代码摘录非常抽象,因此正在寻找问题的通用解决方案。 最佳答案 有方法Enumerable#reject这只是为了:(1..4).reject{|x|x==3}.collect{|x|x+1}直接使用一种方法的输出作为另一种方法的输入的做法称为方
我总是使用计数器来检查循环中的第一项(i==0):i=0my_array.eachdo|item|ifi==0#dosomethingwiththefirstitemend#commonstuffi+=1end是否有更优雅的方式来做到这一点(也许是一种方法)? 最佳答案 你可以这样做:my_array.each_with_indexdo|item,index|ifindex==0#dosomethingwiththefirstitemend#commonstuffend试试ideone.
我知道我可以编写Rubycase语句来检查与正则表达式的匹配。但是,我想在返回语句中使用匹配数据。像这样的半伪代码:foo="10/10/2011"casefoowhen/^([0-9][0-9])/print"themonthis#{match[1]}"elseprint"somethingelse"end我怎样才能做到这一点?谢谢!请注意:我知道我永远不会在上述简单情况下使用switch语句,但这只是一个示例。实际上,我试图实现的是为一个可以用各种方式编写的日期匹配许多潜在的正则表达式,然后相应地使用Ruby的Date类对其进行解析。 最佳答案
我只是在学习Ruby,如果这对这里来说太新手了,我深表歉意,但我无法从镐书中解决这个问题(可能只是阅读不够仔细)。无论如何,如果我有这样的数组:arr=[1,2,3,4,5]...我想将数组中的每个值乘以3,我已经计算出执行以下操作:arr.each{|item|item*=3}...不会得到我想要的东西(我明白为什么,我没有修改数组本身)。我不明白的是如何从迭代器之后的代码块内部修改原始数组。我相信这很容易。 最佳答案 使用map从旧数组创建新数组:arr2=arr.map{|item|item*3}使用map!就地修改数组:ar
我尝试使用Range和each向后迭代:(4..0).eachdo|i|putsiend==>4..0遍历0..4写入数字。另一方面,范围r=4..0似乎没问题,r.first==4,r.last==0。上面的构造没有产生预期的结果,这对我来说似乎很奇怪。这是什么原因呢?这种行为在什么情况下是合理的? 最佳答案 范围就是这样:由它的开始和结束定义的东西,而不是它的内容。在一般情况下,在一个范围内“迭代”并没有真正意义。例如,考虑如何“迭代”两个日期产生的范围。你会每天迭代吗?按月?按年?按周?它没有明确定义。IMO,允许前向范围的事
所以我像这样遍历一个范围:(1..100).eachdo|n|#n=1#n=2#n=3#n=4#n=5end但我想做的是以10为单位进行迭代。因此,不是将n增加1,下一个n实际上是10,然后是20、30,等等。 最佳答案 参见http://ruby-doc.org/core/classes/Range.html#M000695获取完整的API。基本上您使用step()方法。例如:(10..100).step(10)do|n|#n=10#n=20#n=30#...end 关于Ruby:如何
我想获得迭代Ruby哈希的特定输出。这是我要迭代的哈希:hash={1=>['a','b'],2=>['c'],3=>['d','e','f','g'],4=>['h']}这是我想要得到的输出:1-----ab2-----c3-----defg4-----h在Ruby中,如何使用Hash获得这样的输出? 最佳答案 hash.eachdo|key,array|puts"#{key}-----"putsarrayend关于顺序,我应该补充一点,在1.8中,项目将以随机顺序迭代(好吧,实际上是按照Fixnum的哈希函数定义的顺序),而在1
PHP,尽管有其缺点,但在这方面相当不错。数组和散列之间没有区别(也许我太天真了,但这对我来说显然是正确的),并且遍历任何一个你只是做foreach(array/hashas$key=>$value)在Ruby中有很多方法可以做这种事:array.length.timesdo|i|endarray.eacharray.each_indexforiinarray哈希更有意义,因为我总是使用hash.eachdo|key,value|为什么我不能对数组执行此操作?如果我只想记住一种方法,我想我可以使用each_index(因为它使索引和值都可用),但不得不做array[index]很烦人而
我们可以使用以下两种方法实现类数组对象的迭代:letarrayLike=document.getElementsByClassName('dummy');[].forEach.call(arrayLike,(e)=>{console.log(e);});Test1Test2或者先使用slice将类数组对象转换为数组:letarrayLike=document.getElementsByClassName('dummy');Array.prototype.slice.call(arrayLike).forEach((e)=>{console.log(e);});Test1Test2哪个更
这是一个小代码片段:asynccomponentDidMount(){...this.state.postList.forEach(element=>{this.fetchItem(element);});}asyncfetchItem(query){...this.setState(previousState=>{constlist=[...previousState.data,data];return{data:list};});}我很想知道在forEach循环的每次迭代中使用setState是否是个坏主意。我怀疑它会影响性能,但我想确定地知道,因为这似乎是解决此问题的最简单方法。