2017-12-28 1 views
1

swift auf schnelle und ich habe ich arbeite eine Reihe von Wörterbüchern wie,Wie kann eine Reihe von Wörterbüchern als in alphabetischer Reihenfolge in der UITableView als Abschnitte in 3.0

[{ „added“ sortieren und kategorisieren: 2017 -12-24, "first_name": Abdullah, "email": [email protected], "Nachname": Jaleel, "Ort": Indien, "Begrüßung": Mr}, {"added": 2017-12 -24, "first_name": Catherine, "email": [email protected], "Nachname": Rose, "Ort": Indien, "Begrüßung": Frau}, {"added": 2017-12-24 , "first_name": Alok, "email": [email protected], "Nachname": Raj, "Ort": Indien, "Begrüßung": Mr}, {"hinzugefügt": 2017-12-24, "first_name": Darwin, "email": [email protected], "Nachname": Jose, "Ort": Indien, " Begrüßung ": Herr}].

Hier möchte ich alle Sprecher in UITableView alphabetisch auf der Basis von first_name auflisten. Ich kann das Array von Wörterbüchern als alphabetisch sortieren, aber das Problem ist, ich möchte die Alphabete in der UITableViewSection zeigen und dieser Abschnitt enthält nur die Namen, die nur mit diesem Alphabet beginnen (wie Kontaktbildschirm des iPhone).

enter image description here So kann ich das Array von Wörterbuch wie folgt konvertieren,

{a: [{ "added": 2017.12.24 "first_name": Abdullah, "E-Mail": spaeker1 @ example.com, "Nachname": Jaleel, "Ort": Indien, "Begrüßung": Mr}, {"hinzugefügt": 2017-12-24, "first_name": Alok, "email": spaeker1 @ Beispiel .com, "Nachname": Raj, "Ort": Indien, "Anrede": Herr}], c: [{"hinzugefügt": 2017-12-24, "first_name": Catherine, "email": spaeker1 @ example.com, "Nachname": Rose, "Ort": Indien, "salutatio n ": Frau}], d: [{" hinzugefügt ": 2017-12-24," first_name ": Darwin, " email ": [email protected]," Nachname ": Jose," Ort ": Indien, "Begrüßung": Herr}]}.

Kann das Wörterbuch wie oben beschrieben gruppiert werden? Ansonsten können Sie alle Lautsprecher in UITableViewSection alphabetisch auflisten. Bitte hilf mir.

+0

Sie können das Wörterbuch durchlaufen und dann das gewünschte Wörterbuch vorbereiten –

+0

* Ich arbeite an swift und ich habe eine Reihe von Wörterbüchern wie .. * - Bist du sicher, dass du Swift benutzt? Ich werde aus dem Stegreif gehen und erklären, dass das von Ihnen gepostete Wörterbuch in keiner der derzeit existierenden Sprachen eine legale Syntax ist. – 7stud

+0

Parse zum richtigen Objekt, nicht mit Wörterbuch wie diesem arbeiten – Tj3n

Antwort

1

Kann das Wörterbuch wie oben beschrieben gruppiert werden?

let users = [ 
    ["added": "2017-12-24", "first_name": "Abdullah", "email": "[email protected]", "Last_name": "Jaleel", "place": "India", "salutation": "Mr"], 
    ["added": "2017-12-24", "first_name": "Catherine", "email": "[email protected]", "Last_name": "Rose", "place": "India", "salutation": "Mrs"], 
    ["added": "2017-12-24", "first_name": "Alok", "email": "[email protected]", "Last_name": "Raj", "place": "India", "salutation": "Mr"], 
    ["added": "2017-12-24", "first_name": "Darwin", "email": "[email protected]", "Last_name": "Jose", "place": "India", "salutation": "Mr"] 
] 

func firstCharOfFirstName(_ aDict: [String:String]) -> Character { 
    return aDict["first_name"]!.first! 
} 

let groupedUsers = Dictionary(grouping: users, by: firstCharOfFirstName) 
print(groupedUsers) 

--output:-- 
["C": 
[["added": "2017-12-24", "Last_name": "Rose", "place": "India", "email": "[email protected]", "first_name": "Catherine", "salutation": "Mrs"]], 
"D": 
[["added": "2017-12-24", "Last_name": "Jose", "place": "India", "email": "[email protected]", "first_name": "Darwin", "salutation": "Mr"]], 
"A": 
[["added": "2017-12-24", "Last_name": "Jaleel", "place": "India", "email": "[email protected]", "first_name": "Abdullah", "salutation": "Mr"], 
["added": "2017-12-24", "Last_name": "Raj", "place": "India", "email": "[email protected]", "first_name": "Alok", "salutation": "Mr"]]] 

Dann können Sie jede Gruppe sortieren nach Bedarf.

+0

Das funktioniert für mich. Vielen Dank – hilaj

1

Ich denke, man könnte nützlich unter Verwendung einer Kombination aus reduce + sorted auf diese Weise finden alphabetisch Sie gruppieren können Ihre Wörterbücher, das Hinzufügen erste Zeichen von first_name als Schlüssel:

Swift 3,0

let arrayOfDict = [ ["added": "2017-12-24", "first_name": "Abdullah", "email": "[email protected]", "Last_name": "Jaleel", "place": "India", "salutation":"Mr"],["added": "2017-12-24", "first_name": "Catherine", "email": "[email protected]", "Last_name": "Rose", "place": "India", "salutation":"Mrs"],["added": "2017-12-24", "first_name": "Alok", "email": "[email protected]", "Last_name": "Raj", "place": "India", "salutation":"Mr"],["added": "2017-12-24", "first_name": "Darwin", "email": "[email protected]", "Last_name": "Jose", "place": "India", "salutation":"Mr"]] 

var result = arrayOfDict.reduce([String: [[String:Any]]]()) { res, element in 
    var mutableRes = res 
    if let firstLetter = element["first_name"]?.characters.prefix(0) { 
    let initial = String(describing: firstLetter).lowercased() 
    if mutableRes[initial] == nil { 
     mutableRes[initial] = [[String:Any]]() 
    } 
    mutableRes[initial]?.append(element) 
    } 
    return mutableRes 
}.sorted { return $0.key < $1.key } 

Swift 4,0

let arrayOfDict = [ ["added": "2017-12-24", "first_name": "Abdullah", "email": "[email protected]", "Last_name": "Jaleel", "place": "India", "salutation":"Mr"],["added": "2017-12-24", "first_name": "Catherine", "email": "[email protected]", "Last_name": "Rose", "place": "India", "salutation":"Mrs"],["added": "2017-12-24", "first_name": "Alok", "email": "[email protected]", "Last_name": "Raj", "place": "India", "salutation":"Mr"],["added": "2017-12-24", "first_name": "Darwin", "email": "[email protected]", "Last_name": "Jose", "place": "India", "salutation":"Mr"]] 

let result = arrayOfDict.reduce(into: [String: [[String:Any]]]()) { result, element in 
    if let firstLetter = element["first_name"]?.first { 
    let initial = String(describing: firstLetter).lowercased() 
     result[initial, default: [[String:Any]]() ].append(element) 
    }}.sorted { return $0.key < $1.key } 
print(result) 

Endergebnis wird sein:

[(key: "a", value: [["added": "2017-12-24", "Last_name": "Jaleel", "place": "India", "email": "[email protected]", "first_name": "Abdullah", "salutation": "Mr"], ["added": "2017-12-24", "Last_name": "Raj", "place": "India", "email": "[email protected]", "first_name": "Alok", "salutation": "Mr"]]), (key: "c", value: [["added": "2017-12-24", "Last_name": "Rose", "place": "India", "email": "[email protected]", "first_name": "Catherine", "salutation": "Mrs"]]), (key: "d", value: [["added": "2017-12-24", "Last_name": "Jose", "place": "India", "email": "[email protected]", "first_name": "Darwin", "salutation": "Mr"]])] 
1

Sie können das Array von Wörterbuch-Schleife durch das Ergebnis dann vorzubereiten.

-Code

let dict = [ ["added": "2017-12-24", "first_name": "Abdullah", "email": "[email protected]", "Last_name": "Jaleel", "place": "India", "salutation":"Mr"], ["added": "2017-12-24", "first_name": "Catherine", "email": "[email protected]", "Last_name": "Rose", "place": "India", "salutation":"Mrs"], ["added": "2017-12-24", "first_name": "Alok", "email": "[email protected]", "Last_name": "Raj", "place": "India", "salutation":"Mr"], ["added": "2017-12-24", "first_name": "Darwin", "email": "[email protected]", "Last_name": "Jose", "place": "India", "salutation":"Mr"]] 

var result: [String:[[String:String]]] = [:] 
for d in dict { 
    var tempContactArray: [[String:String]] = [] 
    let firstName = d["first_name"]?.lowercased() 
    let firstChar = firstName![0] 
    if let data = result[firstChar] { 
     tempContactArray = data 
    } 
    tempContactArray.append(d) 
    result[firstChar] = tempContactArray 
} 
let sortedKeysAndValues = result.sorted(by: { $0.0 < $1.0 }) 

print(sortedKeysAndValues) 

eine Verlängerung der Zeichenfolge schreiben als

extension String { 
subscript (i: Int) -> String { 
    return String(self[index(startIndex, offsetBy: i)] as Character) 
} 

}

Ausgabe von sortedKeysAndValues ​​

[(key: "a", value: [["added": "2017-12-24", "Last_name": "Jaleel", "place": "India", "email": "[email protected]", "first_name": "Abdullah", "salutation": "Mr"], ["added": "2017-12-24", "Last_name": "Raj", "place": "India", "email": "[email protected]", "first_name": "Alok", "salutation": "Mr"]]), (key: "c", value: [["added": "2017-12-24", "Last_name": "Rose", "place": "India", "email": "[email protected]", "first_name": "Catherine", "salutation": "Mrs"]]), (key: "d", value: [["added": "2017-12-24", "Last_name": "Jose", "place": "India", "email": "[email protected]", "first_name": "Darwin", "salutation": "Mr"]])] 

Sie können ein Wörterbuch nicht sortieren, da das Wörterbuch eine ungeordnete Sammlung von Elementen ist. Wenn Sie also sortieren wollen, muss es Array sein.

Verwandte Themen