我无法继续运行我的应用程序,也无法测试运行它,因为我的代码中有一些错误,我不知道如何解决! 这是代码:
db.collection.aggregate([
{ $unwind: "$P.Workspaces" },
{ $match: { "P.Workspaces.Status":'something'}},
{ $group: { _id: "$P.Workspaces.Key", average: { $avg: "$P.Workspaces.Size" } } }
])
答案 0 :(得分:2)
问题在于数组是一种值类型,并且在修改一个元素时会更改整个数组。因此,您对customSwap()
的调用会将两个引用传递给整个数组,从而导致对自身的重叠访问错误。
相反,您可以编写customSwap()
来获取数组和要交换的索引的一个副本:
func customSwap<T>(_ array: inout [T], _ a: Int, _ b: Int) {
let temp = array[a]
array[a] = array[b]
array[b] = temp
}
然后这样称呼它:
customSwap(&self, i, j)
但是您不必这样做,因为Array
具有如下定义的内置swapAt(_:_)
:
mutating func swapAt(_ i: Int, _ j: Int)
因此您可以将customSwap
通话替换为:
self.swapAt(i, j)
但是Array
具有内置的shuffle()
,您可以调用它而不用自己实现。