Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 按降序返回非负整数_Ruby - Fatal编程技术网

Ruby 按降序返回非负整数

Ruby 按降序返回非负整数,ruby,Ruby,我正在研究一个Ruby挑战,将任何非负整数作为参数,并以降序返回其数字。基本上,重新排列数字以创建尽可能高的数字 例如: Input: 145263 Output: 654321 Input: 123456789 Output: 987654321 目前,我的解决方案是这样的: def descending_order(n) # take any non-negative integer as an argument # return it with digits in desce

我正在研究一个Ruby挑战,将任何非负整数作为参数,并以降序返回其数字。基本上,重新排列数字以创建尽可能高的数字

例如:


Input: 145263 Output: 654321

Input: 123456789 Output: 987654321
目前,我的解决方案是这样的:

def descending_order(n)
  # take any non-negative integer as an argument
  # return it with digits in descending order
   n.sqrt(1){ |digits| digits.sort_by.reverse }
  
end
但是,它不断抛出一条错误消息,指出:

 `descending_order': undefined method `sqrt' for 0:Integer (NoMethodError)
这将创建一个字符串数组,每个字符串都是作为文本的单个数字。我们可以在这里使用普通排序,因为我们可以合理地假设编码中的数字排序序列遵循与其数字对应项相同的顺序。特别是,我们知道,即“4”与“8”


这将创建一个字符串数组,每个字符串都是作为文本的单个数字。我们可以在这里使用普通排序,因为我们可以合理地假设编码中的数字排序序列遵循与其数字对应项相同的顺序。特别是,我们知道,即“4”<“8”。

我认为最容易理解的答案是:

n = 145263
n.digits.sort.reverse.join.to_i

n.digits                        => [3, 6, 2, 5, 4, 1]
n.digits.sort                   => [1, 2, 3, 4, 5, 6]
n.digits.sort.reverse           => [6, 5, 4, 3, 2, 1]
n.digits.sort.reverse.join      => "654321"
n.digits.sort.reverse.join.to_i => 654321
方法概述
我喜欢汤姆·洛德在评论中的回答。一开始有点神秘,但Stefan的解释非常好。

我认为最容易理解的答案是:

n = 145263
n.digits.sort.reverse.join.to_i

n.digits                        => [3, 6, 2, 5, 4, 1]
n.digits.sort                   => [1, 2, 3, 4, 5, 6]
n.digits.sort.reverse           => [6, 5, 4, 3, 2, 1]
n.digits.sort.reverse.join      => "654321"
n.digits.sort.reverse.join.to_i => 654321
方法概述
我喜欢汤姆·洛德在评论中的回答。一开始有点神秘,但是Stefan的解释非常好。

我不明白为什么要在这里取平方根,但无论如何,Ruby没有这个名称的方法。为了得到一个数字的平方根,做一个n**0.5。为什么要写sqrt1?这应该达到什么目的?@user1934428:ruby的确有数学方面的要求。sqrt@SergioTulentsev:是的,我明白了。我应该说,在numeric类中没有用于此的实例方法。当然,主要问题是在这里扎根没有意义。另外,OP编辑了现在读取的代码n.sqrt1,这更疯狂,因为它似乎提供了两个参数n和1。我现在想知道OP是否真的想在这里计算根,或者可能意味着完全不同的东西,而sqrt只是一个输入错误。@user1934428:是的,sqrt在这里没有任何意义。我不明白为什么你想在这里取平方根,但无论如何,Ruby没有这个名称的方法。为了得到一个数字的平方根,做一个n**0.5。为什么要写sqrt1?这应该达到什么目的?@user1934428:ruby的确有数学方面的要求。sqrt@SergioTulentsev:是的,我明白了。我应该说,在numeric类中没有用于此的实例方法。当然,主要问题是在这里扎根没有意义。另外,OP编辑了现在读取的代码n.sqrt1,这更疯狂,因为它似乎提供了两个参数n和1。我现在想知道OP是否真的想在这里计算根,或者可能意味着完全不同的东西,而sqrt只是一个输入错误。@user1934428:是的,sqrt在这里没有任何意义。所以排序方法不能直接处理整数?我们必须有一个字符串数组才能使.sort方法工作?谢谢你的解释@KobadaTech:排序本质上是在有序集合(即数组)上定义的。从数学角度思考:对单个项目进行排序意味着什么?您可以使用.digits代替.to_.split//。而不是sort.reverse,你可以这样做,虽然它在这里没有什么区别。sort|u by{i |-i}或等效。sort|u by&:-@。换句话说,你可以写得更短,如:n.digits.sort|u by&:-@。join.to_i@user1934428:-@表示一元负号,例如5.发送:-@=>-5否定,而:-表示二元负号,例如5.发送:-,2=>3减法。您还可以使用def-@do定义前者。一元加号也一样,即+@所以排序方法不能直接处理整数?我们必须有一个字符串数组才能使.sort方法工作?谢谢你的解释@KobadaTech:排序本质上是在有序集合(即数组)上定义的。从数学角度思考:对单个项目进行排序意味着什么?您可以使用.digits代替.to_.split//。而不是sort.reverse,你可以这样做,虽然它在这里没有什么区别。sort|u by{i |-i}或等效。sort|u by&:-@。换句话说,你可以写得更短,如:n.digits.sort|u by&:-@。join.to_i@user1934428:-@表示一元负号,例如5.发送:-@=>-5否定,而:-表示二元负号,例如5.发送:-,2=>3减法。您还可以使用def-@do定义前者。一元加号也一样,即+@
digits  => Returns the digits of ints place-value representation with radix base (default: 10). The digits are returned as an array with the least significant digit as the first array element.
sort    => Returns a new array created by sorting self.
reverse => Returns a new array containing selfs elements in reverse order.
join    => Returns a string created by converting each element of the array to a string, separated by the given separator. If the separator is nil, it uses current $,. If both the separator and $, are nil, it uses an empty string.
to_i    => Returns the result of interpreting leading characters in str as an integer base base (between 2 and 36).