2015-11-03 2 views
0

У меня есть 3 массивыСортировка массивов в соответствии с элементами в одном массиве Swift

createdAt = [someNSDate1, someNSDate2, someNSDate3] 
customerId = ["a1", "h5", "c2"] 
age = [21, 8, 60] 

Как сортировать эти массивы в соответствии с элементами в одном из них?

Например: Как я могу убедиться, что customerId[0] = c2 и age[0] = 60, если я сортирую createdAt в соответствии с NSDate, а someNSDate3 - это самая последняя дата?

+0

Параллельные массивы на самом деле подвержены ошибкам. Почему бы не создать пользовательский объект с тремя свойствами и иметь один массив из них? Это упрощает правильное соотношение элементов данных. –

+0

Да, если бы вы могли показать, как это будет отличный ответ – KML

+0

Мне непонятно, какую часть этого вы не понимаете. Как создать пользовательский класс (или структуру)? Как создать массив? ...? –

ответ

2

Я бы предложил создать структуру, содержащую все данные.

struct DataItem { 
    let createdAt: NSDate 
    let customerId: Int 
    let age: Int 
} 

А затем создать массив DataItems

EDIT: создать массив с DataItems как этот

var array : [DataItem]() 

, то вы можете добавить новые DataItems как это

array.append(DataItem(<the date>, <the customerid>, <age>)); 
+0

Вы второй, кто предлагает это, но как нет учебников или примеров этого, которые я могу найти – KML

+0

Вы можете создать массив из них, просто указав массив var: [DataItem]() – stonecompass

1

Вот вы, полный пример, включая сортировку:

struct Item { 
    let creationDate : NSDate 
    let customerID : String 
    let age : Int 
} 

let items = [ 
    Item(creationDate: NSDate(), customerID: "a1", age: 21), 
    Item(creationDate: NSDate(), customerID: "h5", age: 8), 
    Item(creationDate: NSDate(), customerID: "c2", age: 60) 
] 

extension NSDate : Comparable {} 
public func <(lhs: NSDate, rhs: NSDate) -> Bool { 
    return lhs.compare(rhs) == .OrderedAscending 
} 

let dateSorted = items.sort{ $0.creationDate < $1.creationDate } 
let idSorted = items.sort{ $0.customerID < $1.customerID } 
let ageSorted = items.sort{ $0.age < $1.age } 
Смежные вопросы