草庐IT

ruby - 如何按数组可以创建的唯一组的数量对数组进行排序

我不知道如何正确地表述问题,但我想要的是以下内容:假设有一个像这样的数组[1,1,1,1,2,2,2,3,3,3,4,4,5]我如何排序它,直到它成为输出:[1,2,3,4,5,1,2,3,4,1,2,3,1]为了使输出更具可读性:[[1,2,3,4,5],[1,2,3,4],[1,2,3],[1]]到目前为止我想出的是:array=[1,1,1,1,2,2,2,3,3,3,4,4,5]array.group_by{|n|n}.values.transpose.flatten但是由于没有相同数量的数字,这会引发错误。有人可以帮忙吗? 最佳答案

ruby - 两个运算符(+,-)对数组项的所有可能操作

给定一个数组,我想生成一个新数组,其中包含将+1或-1依次添加到原始数组的每个项目的结果。这很难用语言解释,所以请看下面的例子。例如给定数组ary=[1,2]一次从一项中添加或减去1时得到的数组应该是:[[1+1,2],[1-1,2],[1,2+1],[1,2-1]]类似地,一次从两个项目中添加或减去1时得到的数组将是:[[1+1,2+1],[1+1,2-1],[1-1,2-1],[1-1,2+1]]+1和-1项的基本上所有可能的结果,并获得结果数组。几乎是一次使用1或一次使用2等等的项目组合。我最初认为排列可以解决这个问题,但它只给出了示例:[['+','-'],['-','+']]

ruby - 一元减号是否应该对数字文字具有更高的优先级?

当涉及数字文字时,一元减号似乎具有特殊的优先级。这是记录在案的行为吗?我见过的优先级表(例如here)甚至没有提到点(方法调用)运算符。在ruby​​2.3.6上测试:puts"===literalinteger==="#`-`hashigherprecedencethan`.`p(-1.abs)#=>1p(-(1.abs))#=>-1(previouslineshouldmatchthisif`.`hadhigherprecedence)puts"===literalfloat==="#again`-`hashigherprecedencethan`.`p(-1.2.abs)#=>1

ruby-on-rails - 如何按 ruby​​ 中的多个属性对数组进行排序?

我有用户配置文件列表。我需要根据以下标准对用户个人资料进行排序,如下所示:profile_claimed(boolean)->profile_complete_status(integer)->No_of_friends(integer)代码:user_profiles.sort{|x|[x.claim?0:1,x.complete_profile_status,x.no_of_friends]}如何对用户画像进行排序? 最佳答案 你可以使用sort_by:user_profiles.sort_bydo|x|[(x.claim?0:

arrays - 将两个数组转换为一个哈希对数组

我有两个数组:dates=[1,2,3]values=[10,20,30]我怎样才能像这样组合它们?[{date:1,value:10},{date:2,value:20}...etc] 最佳答案 dates.zip(values).map{|k,v|{date:k,value:v}} 关于arrays-将两个数组转换为一个哈希对数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

arrays - Ruby 根据多个条件对数字数组的数组进行排序

我的数组看起来像这样:to_sort=[[1,27,-3,1.0],[2,27,-2,2.0],[3,27,-2,3.0],[4,27,-2,4.0],[5,27,-2,5.0],[6,27,1,11.0],[7,27,1,12.0],[8,27,1,13.0],[9,27,2,14.0]]我想根据它们的第二个和第三个值按升序对这些数组进行排序,但是第三个数字为负数的数组必须降序排列并放在其他数组之后。结果应该是这样的:sorted=[[6,27,1,11.0],[7,27,1,12.0],[8,27,1,13.0],[9,27,2,14.0],[2,27,-2,2.0],[3,27,

arrays - 将字符串化键值对数组转换为 Ruby 中的哈希

我在数组中有一些键值对字符串:array=["Name=abc","Id=123","Interest=RockClimbing"]我需要将其转换为散列:hash={"Name"=>"abc","Id"=>"123","Interest"=>"RockClimbing"}我一定是做错了什么,因为我的.shift.split得到了奇怪的映射,导致{"Name=abc"=>"Id=123"}. 最佳答案 您需要做的就是将数组的每个部分拆分为键和值(产生一个双元素数组),然后将结果传递给方便的Hash[]方法:arr=["Name=abc

ruby - 通过比较 2 个相邻元素对数组进行分组

我有一个对象数组,我想根据两个相邻元素的属性之间的差异对它们进行分组。该数组已按该属性排序。例如:原始数组:array=[a,b,c,d,e]和a.attribute=1b.attribute=3c.attribute=6d.attribute=9e.attribute=10如果我想对元素进行分组,使2个相邻元素的属性之差小于或等于2,则结果应如下所示:最终结果result_array=[[a,b],[c],[d,e]]我有什么defgroup_elements_by_difference(array,difference)result_array=[]subgroup=[]last_

ruby - 如何对数组中数组的每个唯一元素求和

我有一个像这样的数组:[1,84][11,29][11,84][12,18][15,55][15,4]我想从这个数组生成一个新数组,例如:[1,84,1][11,113,2][12,18,1][15,59,2]其中每个子数组的第一个元素将是唯一的,它们对应的第二个元素将是总和,第三个元素将是它们的计数。在11的情况下,29+84=113,并且11存在2次,所以[11,113,2]。 最佳答案 a.group_by(&:first).map{|k,v|[k,v.map(&:last).inject(:+),v.size]}#=>[[1

ruby - 用冒号对数字进行排序

我有一个圣经经文、时间或其他一些带有数字和冒号的字符串的列表。我希望将这些分类为:1:52:12:82:1411:36我将如何对这些数字进行排序?我假设我必须解析字符串,用冒号分隔,然后排序。我的尝试给了我这样的东西:1:511:362:12:142:8 最佳答案 使用Enumerable#sort_byinput=%w|1:511:362:12:142:8|input.sort_by{|e|e.split(':').map(&:to_i)}#⇒["1:5","2:1","2:8","2:14","11:36"]map(&:to_i