2017-12-25 6 views
0

Lassen Sie sagen, wir haben eine sortierte Array wie:Gruppe mit gleichem Index sortierte

let sortedArray = [(A, 0), (B, 1), (C, 1), (D, 2), (E, 2), (F, 2)] 

Wie kann ich Gruppe sie mit dem gleichen zweiten Parameter in Tupel wie:

let result = [ 
    ([A], 0), 
    ([B, C], 1), 
    ([D, E, F], 2) 
] 

[B, C] und [D, E, F] vererben die gleiche Reihenfolge aus dem sortierten Array.

Edit:

Ich habe diesen Code auf meinem Spielplatz können

let origin: [(String, Int)] = [("0", 0), ("1", 1), ("2", 1), ("2", 2), ("3", 2)] 
if let last = origin.last { 
    let array = Array<([String], Int)>.init(repeating: ([], 0), count: last.1) 

    for (index, ele) in origin.enumerated() { 
     var b = array[index] as? ([String], Int) 
     b?.0.append(ele.0) 
    } 
} 

Antwort

2

Sie reduce(into:) mit index(where:) Methode kombiniert zu laufen versuchen, verwenden. Wenn Sie den Index der ganzen Zahl anhängen eine neue Zeichenfolge mit dem Array finden ansonsten ein neues Tupelelement mit einem einzelnen String-Array anhängen und die entsprechende ganze Zahl:

let sortedArray:[(string: String, integer: Int)] = [("A", 0), ("B", 1), ("C", 1), ("D", 2), ("E", 2), ("F", 2)] 
let grouped = sortedArray.reduce(into: [(strings:[String], integer: Int)]()) { partial, tuple in 

    if let index = partial.index(where: {$0.integer == tuple.integer }) { 
     partial[index].strings.append(tuple.string) 
    } else { 
     partial.append(([tuple.string], tuple.integer)) 
    } 
} 


print(grouped) 

Dieser Druck wird:

[(Strings: ["A"], ganze Zahl: 0), (Strings: ["B", "C"], ganze Zahl: 1), (Strings: ["D", "E", "F"], ganze Zahl: 2)]

Wenn Sie nicht wollen, Ihre Tupelelemente zu nennen:

let sortedArray = [("A", 0), ("B", 1), ("C", 1), ("D", 2), ("E", 2), ("F", 2)] 
let grouped = sortedArray.reduce(into: [([String],Int)]()) { partial, tuple in 
    if let index = partial.index(where: {$0.1 == tuple.1 }) { 
     partial[index].0.append(tuple.0) 
    } else { 
     partial.append(([tuple.0], tuple.1)) 
    } 
} 
Verwandte Themen