概述首先,这个问题不是“0美元的意思”.我在swift文档中了解到$0就像索引一样. 我的问题是“如何使用numbers.sort {$0> $1}来实现排序功能”.我搜索了这个语法
numbers.sort {$0>其他一些网站的价格为1美元,例如this one.显然不是当前版本.所以我还是无法理解它的含义. print(numbers) //[20, 19, 1, 12]let sortedNu 首先,这个问题不是“0美元的意思”.我在swift文档中了解到$0就像索引一样. 我的问题是“如何使用numbers.sort {$0> $1}来实现排序功能”.我搜索了这个语法numbers.sort {$0>其他一些网站的价格为1美元,例如this one.显然不是当前版本.所以我还是无法理解它的含义. print(numbers) //[20,19,1,12]let sortednumbers = numbers.sort { if numbers[1] < numbers[2]{ //just consIDer this pseudocode int k; k = numbers[1]; numbers[1] = numbers[2]; numbers[2] = k;} > }print(sortednumbers) //[20,12,1]
有人
可以为我解释上面这段简单的代码吗?就像这个简单的代码$0> $1实现sort函数,将数字从大到小排序.
我知道一些关于索引,这个$0看起来像索引,但它只有$0和$1两个索引.那怎么能用到4个数字呢?根据我之前在C中的知识,我无法理解其中的原理.
请尽可能详细地回答您的问题.谢谢!
—————–以下是编辑的额外部分——————-
我不知道stackoverflow是否允许我像这样编辑我的问题,但是这个额外的部分太长了,所以我不能在评论中添加它.
@pbodsk @Paul Richter所以swift中的sort()语法使用快速排序来处理排序函数?
实际上我的问题更多的是“什么是排序{$0> $1}的 *** 作原理”.我知道你的意思,我认为这与swift 2.1文件所说的相似,但你的回答并不是我真正想知道的.对不起,我的英文表达不是很好.让我尝试另一种方式.
当我之前学习过C语言时,总会有一些文档来解释函数的 *** 作原理是什么,或者这个函数(如此处的sort()如何)在后台运行. Sort()这里需要比较第一次和第二次交换.在C中,它就像
numbers.sort({(val1: Int,val2: Int) -> Bool in return val1 > val2})
我们可以看到这个过程很明显.在快速,它就像
func sortBackwards(val1: Int,val2: Int) -> Bool { print("val1: \(val1) - val2: \(val2)" ) return val1 > val2}
它在哪里比较?它是如何互换的?返回val1> val2自动比较并交换这两个值并返回它们?只需这一个语法就可以实现这3个进程吗?怎么样?这是我真正想知道的.对不起我的英语表达能力差了.
@the_UB和@moonvader都是正确的,但我只是想我会从@moonvader中扩展一下这个例子,只是为了告诉你我们如何最终得到$0> $1
如果你看一下关于Closure Expressions的“Swift编程语言”中的例子,你可以看到对你调用sort方法的数组进行排序,然后可以将一个函数作为参数.此函数必须采用两个参数并进行比较,然后返回一个布尔值.
所以,如果我们有这个数组:
让数字= [4,6,8,3]
而这种方法
val1: 6 - val2: 4val1: 8 - val2: 4val1: 8 - val2: 6val1: 1 - val2: 4val1: 3 - val2: 1val1: 3 - val2: 4
我们可以像这样对元素进行排序:
numbers.sort(sortBackwards)//给我们[8,4,3,1]
sort方法将对数组中的每个元素使用sortBackwards方法并进行比较.
这是打印的输出
numbers.sort({(val1: Int,val2: Int) -> Bool in return val1 > val2})
好吧,让我们减少它.
我们可以直接将它作为参数添加到sort方法中,而不是定义一个函数,如下所示:
numbers.sort({val1,val2 in return val1 > val2})
我们最终还是[8,1](多么幸运!)
好的,接下来我们可以做的是“Swift编程语言”(上面的链接)被称为“从上下文中推断类型”.当我们在Ints数组上调用此方法时,Swift可以发现我们的val1和val2参数也必须是Ints,我们无需告诉它.所以,让我们删除类型.这让我们:
numbers.sort({val1,val2 in val1 > val2})
好的,到那儿.我们接下来要做的是书中的内容称为“单表达式闭包的隐式返回”并且结果仍然相同.
由于我们的比较可以在一行中完成,因此我们无需使用return.所以:
numbers.sort({
numbers.sort{ > }
> })最后我们得到了@moonvader使用了更少的单词来解释:-)即“速记参数名称”还给我们[8,1]
正如书中所说:
Swift automatically provIDes shorthand argument names to inline closures,which can be used to refer to the values of the closure’s arguments by the names $0,$1,$2,and so on.
因此,在我们的示例中,val1可以替换为$0,val2可以替换为$1
这给了我们:
我们仍然得到[8,1]
然后我们可以继续使用“Trailing Closure”,这意味着如果函数的最后一个参数是闭包,我们可以在函数“外部”添加该参数.
所以我们最终得到:
结果仍然是[8,1]希望有助于澄清事情.
以上是内存溢出为你收集整理的Swift:有人可以为我解释这个语法`numbers.sort {$0> $1}`吗?全部内容,希望文章能够帮你解决Swift:有人可以为我解释这个语法`numbers.sort {$0> $1}`吗?所遇到的程序开发问题。
登录
后才能评论