高阶函数sort()将其与其他更高阶函数一起使用,它也与let内容一起使用

问题描述 投票:-1回答:3

所以,背后的任何原因都会发生这种情况,因为当我执行sort()函数时,让我在那个时候使用类型xcode给我一个编译时错误

我在我的操场上尝试了它只有sort函数和sort()函数与其他更高阶函数。

像这样

let name = ["mehul","HeLLi","JeniFER","Ankul"]
name.sort()

错误:

不能在不可变值上使用变异成员:'name'是'let'常量

但与其他更高阶的功能

let nameStartingWithBArray = name.filter {$0.first != "B"}.map {$0.uppercased()}.sorted()

现在没有错误

ios swift
3个回答
0
投票

您正在使用的sort func是变异函数,这意味着排序函数在内部对同一变量中的数组进行排序。

Mutating Func:要修改特定方法中结构或枚举的属性,可以选择改变该方法的行为。然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构。

所以。 let不允许sort做变异,所以你需要让它变成var。

更重要的是,如果你使用sorted(by:),它会返回新的排序值数组。所以在这里你没有得到任何错误。


3
投票

请考虑排序和排序之间的细微但重要的区别

  • sort没有回报价值。它排序到位意味着调用对象发生了变异。
  • sorted(以及filtermap)返回一个带有操作结果的新对象。

1
投票

sort函数对集合进行了排序 - 即它修改了数组name,你可以在其上调用sort

另一方面,filter返回一个数组,不会修改原始数组。

sortsorted进行比较,let sortedNames = name.sorted() 再次返回一个新数组并且不会修改原始数组。

所以,你可以写

sortedNames

name将按顺序排列,而var name = ["mehul","HeLLi","JeniFER","Ankul"] name.sort() 将按照原始的,未分类的顺序排列。

如果你写

name

然后var将按顺序排列,因为它被宣布为let而不是qazxswpoi的常数,所以允许更改。

© www.soinside.com 2019 - 2024. All rights reserved.