不带数组的Ruby排序代码示例说明

不带数组的Ruby排序代码示例说明,ruby,sorting,Ruby,Sorting,我对ruby不熟悉。我正在做一项作业,没有解释给出的例子。有人能解释一下这种排序代码是如何工作的吗?它需要3个输入并按字母顺序排序,但我不明白它是如何做到这一点的 # sort n1, n2 = n2, n1 if n1 > n2 n1, n3 = n3, n1 if n1 > n3 n2, n3 = n3, n2 if n2 > n3 n1,n2=n2,n1正在使用并行赋值来交换存储在n1和n2中的值。只有当n1>n2时才执行。这样,在第一行之后,n1值将小于n2值 第二

我对ruby不熟悉。我正在做一项作业,没有解释给出的例子。有人能解释一下这种排序代码是如何工作的吗?它需要3个输入并按字母顺序排序,但我不明白它是如何做到这一点的

# sort
n1, n2 = n2, n1 if n1 > n2
n1, n3 = n3, n1 if n1 > n3
n2, n3 = n3, n2 if n2 > n3 

n1,n2=n2,n1
正在使用并行赋值来交换存储在
n1
n2
中的值。只有当n1>n2时才执行
。这样,在第一行之后,
n1
值将小于
n2

第二行也会发生同样的情况,即交换
n1
n3
的值,以确保
n1
中的值最小

第三行中的
n1
是现在的最小值。您必须对
n2
n3
进行排序,因此您再次进行交换,以使
n2
小于
n3


排序方法应返回
[n1,n2,n3]
n1,n2=n2,n1
正在使用并行赋值来交换存储在
n1
n2
中的值。只有当n1>n2
时才执行
。这样,在第一行之后,
n1
值将小于
n2

第二行也会发生同样的情况,即交换
n1
n3
的值,以确保
n1
中的值最小

第三行中的
n1
是现在的最小值。您必须对
n2
n3
进行排序,因此您再次进行交换,以使
n2
小于
n3


您的排序方法应该返回
[n1,n2,n3]

为了可读性,我将
if
从尾随形式重写为块形式,因为尾随
if
条件颠倒了我们读取行的方式,使我们在第一次遇到它们时更难理解。加上并行赋值,一开始可能会让人困惑

思考这些:

n1 = 1
n2 = 2
n3 = 3

[n1, n2, n3] # => [1, 2, 3]
if n1 > n2 # => false
  n1, n2 = n2, n1 # => 
end

if n1 > n3 # => false
  n1, n3 = n3, n1 # => 
end

if n2 > n3 # => false
  n2, n3 = n3, n2 # => 
end
[n1, n2, n3] # => [1, 2, 3]
在了解值的排序顺序是基于值的类型之前,比较值可能会令人困惑。字符通常按ASCII的顺序排序。。。除非您使用的是IBM大型机上的EBCDIC,但希望您不是


Ruby有一些工具,可以更容易地可视化正在发生的事情。我碰巧正在使用“.”

我将
if
从尾随形式重写为块形式,以便于可读性,因为尾随
if
条件颠倒了我们读取行的方式,使我们在第一次遇到它们时更难理解。加上并行赋值,一开始可能会让人困惑

思考这些:

n1 = 1
n2 = 2
n3 = 3

[n1, n2, n3] # => [1, 2, 3]
if n1 > n2 # => false
  n1, n2 = n2, n1 # => 
end

if n1 > n3 # => false
  n1, n3 = n3, n1 # => 
end

if n2 > n3 # => false
  n2, n3 = n3, n2 # => 
end
[n1, n2, n3] # => [1, 2, 3]
在了解值的排序顺序是基于值的类型之前,比较值可能会令人困惑。字符通常按ASCII的顺序排序。。。除非您使用的是IBM大型机上的EBCDIC,但希望您不是


Ruby有一些工具,可以更容易地可视化正在发生的事情。我碰巧正在使用“.”

它不是按字母顺序排序,而是按值排序,从最小值到最大值。如果你输入字符,它会按字母顺序排序,输入数字,然后按它们的值排序;看我下面的例子。它不是按字母顺序排序,而是按值排序,从最小到最大。如果你输入字符,它会按字母顺序排序,输入数字,然后按它们的值排序;见下面我的例子。
n1, n2, n3 = 3, 1, 2
n1, n2 = n2, n1 if n1 > n2 # => [1, 3]
n1, n3 = n3, n1 if n1 > n3 # => nil
n2, n3 = n3, n2 if n2 > n3 # => [2, 3]
[n1, n2, n3] # => [1, 2, 3]

n1, n2, n3 = 3, 2, 1
n1, n2 = n2, n1 if n1 > n2 # => [2, 3]
n1, n3 = n3, n1 if n1 > n3 # => [1, 2]
n2, n3 = n3, n2 if n2 > n3 # => [2, 3]
[n1, n2, n3] # => [1, 2, 3]
n1, n2, n3 = %w[c b a]
n1, n2 = n2, n1 if n1 > n2 # => ["b", "c"]
n1, n3 = n3, n1 if n1 > n3 # => ["a", "b"]
n2, n3 = n3, n2 if n2 > n3 # => ["b", "c"]
[n1, n2, n3] # => ["a", "b", "c"]

n1, n2, n3 = %w[b A 1]
n1, n2 = n2, n1 if n1 > n2 # => ["A", "b"]
n1, n3 = n3, n1 if n1 > n3 # => ["1", "A"]
n2, n3 = n3, n2 if n2 > n3 # => ["A", "b"]
[n1, n2, n3] # => ["1", "A", "b"]

n1, n2, n3 = %w[b 02 1]
n1, n2 = n2, n1 if n1 > n2 # => ["02", "b"]
n1, n3 = n3, n1 if n1 > n3 # => nil
n2, n3 = n3, n2 if n2 > n3 # => ["1", "b"]
[n1, n2, n3] # => ["02", "1", "b"]

n1, n2, n3 = %w[3 2 1]
n1, n2 = n2, n1 if n1 > n2 # => ["2", "3"]
n1, n3 = n3, n1 if n1 > n3 # => ["1", "2"]
n2, n3 = n3, n2 if n2 > n3 # => ["2", "3"]
[n1, n2, n3] # => ["1", "2", "3"]