Determinar si una matriz cambió después de orderar

Me gustaría determinar si debo volver a cargar un TableView. Cuando aparece, hago una sorting simple basada en nombres.

Podría volver a esta vista con más o less elementos en el origen de datos, o un elemento alterado en el origen de datos que requiere un nuevo order de las celdas. es decir, el nombre cambió de Foo a Bar, por lo tanto, cambio de order.

¿Cómo determino si la mutación de la list se produjo después de usar el método de sorting Swift? Estoy buscando algo como esto

let orderDidChange = clientList.sort({ $0.clientName < $1.clientName }) 

Aquí está mi código actual

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) let originalList = clientList orderHasChanged = false clientList.sort({ $0.clientName < $1.clientName }) clientList.sort({ $0.isBase > $1.isBase }) orderHasChanged = clientList != originalList if orderHasChanged { // always enters here println("changed") tableView.beginUpdates() tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: UITableViewRowAnimation.Fade) tableView.endUpdates() } else { println("same do nothing") } } 

En realidad, puede comprobar si la matriz anterior es igual a la matriz orderada utilizando el operador == . Si dos arrays contienen los mismos datos, pero en un order diferente, no son iguales.

Por ejemplo,

 let bar: [String] = ["Hello", "World"] let foo: [String] = ["Hello", "World"] //this will print "true" //bar and foo contain the same data in the same order print(bar == foo) let bar: [String] = ["Hello", "World"] let foo: [String] = ["World", "Hello"] //this will print "false" //bar and foo contain the same data, but in a different order print(bar == foo) 

Entonces, algo así funcionaría

 let originalList = clientList clientList.sort({ $0.clientName < $1.clientName }) let orderHasChanged = clientList != originalList 

Esto es lo más corto que se me ocurre. En primer lugar, debe agregar un indicador como propiedad, luego con el order modificado a continuación, donde el indicador se establece en function de si hubo un orderamiento. Si ha sido BilledSort entonces recarga tu tableView o no.

 //private property var hasBeenSorted = false //var names = [3, 1, 4, 2] var names = [1, 2, 3, 4] names.sort({ let isLess = $0 < $1 //binary OR since we are interested only when it is true hasBeenSorted = isLess || hasBeenSorted return isLess }) hasBeenSorted //false