sorted()中的元素索引

时间:2014-12-29 20:26:53

标签: swift sorted

致电时

sorted(<#source: C#>, <#isOrderedBefore: (C.Generator.Element, C.Generator.Element) -> Bool##(C.Generator.Element, C.Generator.Element) -> Bool#>)

您可以通过$0$1访问两个源元素进行比较。但是,我如何确定从源头获取它们的索引?

1 个答案:

答案 0 :(得分:5)

你可以传入sorted而不是元素的集合,但是元素的索引:

let a = ["hello","i","must","be","going"]
let idxs = sorted(indices(a)) { a[$0] < a[$1] }
// produces [3, 4, 0, 1, 2]

或者,如果您不喜欢捕获a并希望元素本身传递到闭包中,您可以传入一系列索引和元素对,如下所示:

let pairs = sorted(Zip2(indices(a),a)) {
    $0.1 < $1.1
}

请注意,结果将是(index,element)对的数组:[(3, be), (4, going), (0, hello), (1, i), (2, must)]。如果您想将其重新转换为元素,则可以执行map(pairs) { $0.1 }

此外,如果您采用just-indices路线并希望稍后将其转换回元素,则可以使用PermutationGenerator执行此操作:

let values = PermutationGenerator(elements: a, indices: idxs)
println(" ".join(values)) // prints "be going hello i must"