数组

时间:2016-11-15 22:46:33

标签: swift

Swift 3 中,有什么区别:

self.myArray.sort(by: { $0.name > $1.name })

let newSortedArray = self.myArray.sorted(by: { $0.name > $1.name })

效果似乎是一样的,但是我需要将第二个的结果传递给另一个数组(或者它自己?),以便能够使用它。

有什么区别?非常感谢帮助。

在此示例中,myArraystruct Whatever {var name: String ""}

的数组

4 个答案:

答案 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]
  1. 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]
  1. sorted() :它将提供一个新排序数组的副本,并且现有数组将始终处于原始状态。

var aSort = sortEx.sorted()

print(aSort)//[0, 1, 4, 10]

print(sortEx)//[1, 4, 0, 10]

  1. 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

快乐编码! :)