在 Swift 3 中,有什么区别:
self.myArray.sort(by: { $0.name > $1.name })
和
let newSortedArray = self.myArray.sorted(by: { $0.name > $1.name })
效果似乎是一样的,但是我需要将第二个的结果传递给另一个数组(或者它自己?),以便能够使用它。
有什么区别?非常感谢帮助。
在此示例中,myArray
是struct Whatever {var name: String ""}
答案 0 :(得分:17)
sort
改变调用它的数组,以便对其项进行排序。 sorted
返回调用它的数组的副本,其值为sorted。
如果数组的原始顺序很重要,则在其上调用sort
会导致严重问题。
此外,如果你有一个包含值类型并在其上调用sorted
的巨型数组,它将复制每个值并使内存使用量加倍。
答案 1 :(得分:9)
请注意,swift 3中的约定是,如果你有一个现在时态动词,如sort或reverse,它是一个变异函数(原始集合被修改),而如果你有一个过去分词或动名词,如枚举,附加或者排序然后你得到一份副本。如果这是不明确的,因为该操作已经是名词,就像union一样,变异版本的命名形式为:formUnion。
答案 2 :(得分:1)
根据Swift 3.0,我们必须对sorted()和sorted(by :)执行函数,其中sorted()将从升序返回值数组,并在sorted(by :)中使其可以升序或降序。 / p>
let array = [[1,2],[3,4],[5],[6,7],[8,9]]
print(array.flatMap{$0}.sorted())
print(array.flatMap{$0}.sorted(by: {$0>$1}))
output :
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
答案 3 :(得分:0)
swift(5.4) 提供了三种排序函数:
1.sort()
2.sorted()
3.sorted(by:)
现在看下面的例子并理解整个事情:-
创建一个示例数组,您将在其上执行所有函数
var sortEx = [1,4,0,10]
sort()
:当您不想将排序后的数组结果存储在另一个数组中时(只有更改应反映到同一个数组中)。仍然,如果您尝试将结果存储到另一个新数组中,它将始终是一个空数组 更改将反映在同一个数组中
sortEx.sort()
print(sortEx) //[0, 1, 4, 10]
//force try to store result in another array by sort()
let freshArray = sortEx.sort()
print(freshArray) //()
print(sortEx) //[0, 1, 4, 10]
sorted()
:它将提供一个新排序数组的副本,并且现有数组将始终处于原始状态。var aSort = sortEx.sorted()
print(aSort)//[0, 1, 4, 10]
print(sortEx)//[1, 4, 0, 10]
sorted(by:)
:通过此功能,您可以按 >
和 <
关键字进行升序/降序排序,并且您的旧原始数组不会受到干扰。升序:
var sortedAscArray = sortEx.sorted(by: <)
print(sortedAscArray)//[0, 1, 4, 10]
print(sortEx)//[1, 4, 0, 10]
Dsc:
var sortedDscArray = sortEx.sorted(by: >)
print(sortedDscArray)//[10, 4, 1, 0]
print(sortEx)//[1, 4, 0, 10]
Apple 参考以获取更多学习信息: https://developer.apple.com/documentation/swift/array/1688499-sort
快乐编码! :)