【发布时间】:2020-12-18 01:00:55
【问题描述】:
我有一个包含 >2500 个客户姓名的列表,并希望创建一个按字母顺序排列的 lastNames 索引(lastname 的第一个字母)。 如果 LastName 前面有空格(我知道 Legacy dataissue 应该稍后会修复),它们应该被删除。如果没有可用的 LastName,那么它应该作为 indexArrayro 中的最后一项出现。
结果应该是 indexArray == ["A","G","I","M","S","Z",""] 大写。
这是我目前得到的。
struct MyObject {
let firstName: String
let lastName : String
}
let objectArray : [MyObject?] = [
MyObject(firstName: "piet", lastName: "mozilla"),
MyObject(firstName: "jol", lastName: " godzilla"),
MyObject(firstName: "", lastName: "Anubis"),
MyObject(firstName: "paul", lastName: ""),
MyObject(firstName: "", lastName: "Strawberry"),
nil,
MyObject(firstName: "jol", lastName: "zwordfish"),
MyObject(firstName: "jol", lastName: ""),
MyObject(firstName: "", lastName: "Zwordfish"),
nil,
MyObject(firstName: "pot", lastName: "IronFly")
]
extension Array {
mutating func rearrange(from: Int, to: Int) {
insert(remove(at: from), at: to)
}
}
extension String
{
func trim() -> String
{
return self.trimmingCharacters(in: .whitespaces)
}
}
let arrayWithNoNils = objectArray.flatMap { $0 } // to remove the 'nil's
let indexedArray = arrayWithNoNils.map({ $0.lastName.prefix(1) }) // get the first character
var indexArr : Array = Set(indexedArray).sorted() as Array // make it unique and sort
if indexArr.count > 0 && indexArr[0] == "" { // move the empty one as last
let cnt = indexArr.count - 1
indexArr.rearrange(from: 0, to: cnt)
}
对 Trim 有帮助吗? 我以为我可以在里面使用它
arrayWithNoNils.map({ $0.lastName.prefix(1) })
类似
arrayWithNoNils.map({ $0.lastName.trim.prefix(1) })
对此有何建议?
一如既往地谢谢你。
【问题讨论】:
-
您能解释一下当前代码的预期结果和实际结果吗?
-
请为您包含的示例数据添加预期输出。目前还不清楚你想要实现什么。
-
说得好,因为现在我记得我希望结果是大写的。
标签: swift dictionary indexing flatmap