objective-c - 对数组进行排序并保留 Objective-C/swift 中某些元素的原始顺序?

标签 objective-c arrays swift sorting

我需要如下内容:

let arr = [...] //array of strings
let resultArr = arr.sort({obj1,obj2 in
   if some_condition(obj1, obj2) {
     ...//return the order of obj1 and obj2 from arr
   } else {
     return obj1 < obj2
   }
})

我看到很多关于如何对数组项进行简单排序的问题/答案,但没有人回答如何存储原始顺序。 some_condition 可以是任意的,但每个数组对象可以按原始顺序或新顺序排序。如何解决这个问题?

示例

let arr = ["a", "f", "d", "b", "y", "c", "e"]
//elements "a", "d", "f" conform some_condition
resultArr == ["a", "f", "d", "b", "c", "e", "y"]

最佳答案

如果我没理解错的话,满足你条件的元素需要准确的留在原来的位置,其他元素会在不固定的位置重新排序。

您可以做的是将可排序条目的原始索引映射到其值的已排序子集。然后使用该配对仅重新分配数组中有资格使用其各自(重新排序的)值进行排序的元素。

例如:

var arr = ["a", "f", "d", "b", "y", "c", "e"]

let isFixed:(String)->Bool = { ["a","f","d"].contains($0) } // condition for fixed elements

zip(arr.enumerated().filter{!isFixed($1)},arr.filter{!isFixed($0)}.sorted())
.forEach{ arr[$0.0] = $1 }

print(arr) // ["a", "f", "d", "b", "c", "e", "y"]

关于objective-c - 对数组进行排序并保留 Objective-C/swift 中某些元素的原始顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580970/

相关文章:

ios - 在多个分区中拆分视频

objective-c - 从 Objective-C 迁移到 Swift 并删除已转换的 Objective-C 文件

cocoa - swift & NSBezierPath

ios - 创建一个可选 block 作为变量

arrays - 与WCF互操作性的数组与列表

ios - 使用 Swift 和 Parse 获取 Facebook UserData 时出现 fatal error

ios - 获取解析 PFUser : relational data

objective-c - 对 objective-c 有帮助吗?我的应用程序不断崩溃?

Java 字节缓冲区完全填满

javascript - 副作用/更改传递给函数的全局变量