Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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_Sorting - Fatal编程技术网

理解Ruby数组排序语法

理解Ruby数组排序语法,ruby,sorting,Ruby,Sorting,我真的不明白下面的排序方法: books = ["Charlie and the Chocolate Factory", "War and Peace", "Utopia", "A Brief History of Time", "A Wrinkle in Time"] books.sort! { |firstBook, secondBook| firstBook <=> secondBook } books=[《查理与巧克力工厂》、《战争与和平》、《乌托邦》、《时间简史》、《时

我真的不明白下面的排序方法:

books = ["Charlie and the Chocolate Factory", "War and Peace", "Utopia", "A Brief History of Time", "A Wrinkle in Time"]

books.sort! { |firstBook, secondBook| firstBook <=> secondBook }
books=[《查理与巧克力工厂》、《战争与和平》、《乌托邦》、《时间简史》、《时间的皱纹》]
书,分类!{|第一本书,第二本书|第一本书第二本书}
这是如何工作的?在ruby书籍中,它们有一个参数,例如
|x |
表示数组中的每个值。如果有多个参数(本例中的firstBook和secondBook),它代表什么

谢谢大家!

运算符返回比较结果

因此
“a”“b”
返回-1,
“b”“a”
返回1,
“a”“a”
返回0

这就是
sort
如何确定元素的顺序。

操作符返回比较结果

因此
“a”“b”
返回-1,
“b”“a”
返回1,
“a”“a”
返回0


这就是
sort
如何确定元素的顺序。

在{}中给出的块作为方法sort的比较函数传递|a、 b |告诉我们这个比较函数需要2个参数(这是我们需要比较的参数的预期数量)


这个块是为数组中的每个元素执行的,但是如果我们还需要一个参数,我们将在后面执行下一个元素。

在{}中给出的块将作为方法sort的比较函数传递|a、 b |告诉我们这个比较函数需要2个参数(这是我们需要比较的参数的预期数量)

此块针对数组中的每个元素执行,但如果我们还需要一个参数,我们将使用该参数后面的下一个元素。

有关说明,请参阅。至于你们书中提到的一个单参数方法,我只能猜你们是在看sort_by。你能举个例子吗?

请参阅以获取解释。至于你们书中提到的一个单参数方法,我只能猜你们是在看sort_by。你能举个例子吗?

(和
排序!
)在没有块的情况下调用将与
进行比较,因此块是冗余的。这些都完成了同样的任务:

books.sort!
books.sort_by!{|x| x}
books.sort!{|firstBook, secondBook| firstBook <=> secondBook}
books.sort_by!(&:length)
然后,
书籍
从最短标题到最长标题进行排序。如果您所做的只是对每个项调用一个方法,那么还有另一个快捷方式可用。这也有同样的作用:

books.sort!
books.sort_by!{|x| x}
books.sort!{|firstBook, secondBook| firstBook <=> secondBook}
books.sort_by!(&:length)
在最后一种形式中,您可以控制比较本身。例如,您可以向后排序:

books.sort!{|first, second| second <=> first}
这将产生:

4, 2 2, 1 3, 2 3, 4 4, 2 2, 1 3, 2 3, 4 这表明在这种情况下,
排序
比较了
4
2
,然后是
2
1
,然后是
3
2
,最后是
3
4
,以便对数组进行排序。精确的细节与本讨论无关,取决于所使用的排序算法,但同样,所有排序算法都需要能够比较项目以进行排序。

(和
排序!
)在没有块的情况下调用将与
进行比较,因此该块是冗余的。这些都完成了同样的任务:

books.sort!
books.sort_by!{|x| x}
books.sort!{|firstBook, secondBook| firstBook <=> secondBook}
books.sort_by!(&:length)
然后,
书籍
从最短标题到最长标题进行排序。如果您所做的只是对每个项调用一个方法,那么还有另一个快捷方式可用。这也有同样的作用:

books.sort!
books.sort_by!{|x| x}
books.sort!{|firstBook, secondBook| firstBook <=> secondBook}
books.sort_by!(&:length)
在最后一种形式中,您可以控制比较本身。例如,您可以向后排序:

books.sort!{|first, second| second <=> first}
这将产生:

4, 2 2, 1 3, 2 3, 4 4, 2 2, 1 3, 2 3, 4
这表明在这种情况下,
排序
比较了
4
2
,然后是
2
1
,然后是
3
2
,最后是
3
4
,以便对数组进行排序。精确的细节与本次讨论无关,取决于所使用的排序算法,但同样,所有排序算法都需要能够比较项目以进行排序。

在books.sort\u by!{| x | x}语法,我不明白的是:x是要排序的东西,所以为什么它不是书。排序依据!(x) {}??而且,如果使用正确的ruby语法,我甚至不知道如何将arugement x传递回sort_by!()方法实际上,
books
是要排序的对象,
x
连续设置到
books
中的每个项目。如果只从块中返回
x
,则它没有用处,但如果您想对项目本身以外的内容进行排序(例如,项目的长度——请再次参阅我的答案中的“这一切是如何工作的?”部分),则它很有用。现在(1天后),我对块/收益率有了更好的理解,我看得出我的问题没有那么有意义。在书中。排序!{| x | x}语法,我不明白的是:x是要排序的东西,所以为什么它不是书。排序依据!(x) {}??而且,如果使用正确的ruby语法,我甚至不知道如何将arugement x传递回sort_by!()方法实际上,
books
是要排序的对象,
x
连续设置到
books
中的每个项目。如果只从块中返回
x
,则它没有用处,但如果您想对项目本身以外的内容进行排序(例如,项目的长度——请再次参阅我的答案中的“这一切是如何工作的?”部分),则它很有用。现在(1天后),我对块/收益率有了更好的理解,我看得出我的问题没有那么有道理。