Swift 使用相同索引对排序集进行分组

Swift 使用相同索引对排序集进行分组,swift,Swift,假设我们有一个排序数组,如: let sortedArray = [(A, 0), (B, 1), (C, 1), (D, 2), (E, 2), (F, 2)] 如何使用元组中相同的第二个参数对它们进行分组,如: let result = [ ([A], 0), ([B, C], 1), ([D, E, F], 2) ] [B,C]和[D,E,F]从排序数组继承相同的顺序 编辑: 我的操场上有这些代码试图运行 let origin: [(String, I

假设我们有一个排序数组,如:

let sortedArray = [(A, 0), (B, 1), (C, 1), (D, 2), (E, 2), (F, 2)]
如何使用元组中相同的第二个参数对它们进行分组,如:

let result = [
     ([A], 0), 
     ([B, C], 1), 
     ([D, E, F], 2)
]
[B,C]
[D,E,F]
从排序数组继承相同的顺序

编辑:

我的操场上有这些代码试图运行

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)
    }
}
let origin:[(字符串,Int)]=[((0,0),((1,1),((2,1),((2,2),((3,2)]
如果let last=origin.last{
让array=array.init(重复:([],0),计数:last.1)
对于origin.enumerated()中的(索引,ele){
var b=数组[索引]为([String],Int)
b?.0.追加(ele.0)
}
}
您可以使用
reduce(into:)
index(where:)
方法结合使用。如果找到整数的索引,请将新字符串附加到数组中,否则将使用单个字符串数组和相应整数附加新元组元素:

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)
这将打印:

[(字符串:[“A”],整数:0),(字符串:[“B”,“C”],整数:1),(字符串:[“D”,“E”,“F”],整数:2)]

如果不想命名元组元素,请执行以下操作:

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))
    }
}
您可以将
reduce(into:)
index(where:)
方法结合使用。如果找到整数的索引,请将新字符串附加到数组中,否则将使用单个字符串数组和相应整数附加新元组元素:

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)
这将打印:

[(字符串:[“A”],整数:0),(字符串:[“B”,“C”],整数:1),(字符串:[“D”,“E”,“F”],整数:2)]

如果不想命名元组元素,请执行以下操作:

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))
    }
}