Swift 对3位数字与4位数字进行排序

Swift 对3位数字与4位数字进行排序,swift,Swift,我之前对一个由两个字母和三个数字组成的唯一id进行排序。此唯一id用于将条目分组到分区表视图中 例如,使用下面的代码[un101、un098、un100、un099、un999]工作正常 self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number[2])}).sorted(by: {$0.0 < $1.0}) self.figuresByLetter=字典(分组:self.figures

我之前对一个由两个字母和三个数字组成的唯一id进行排序。此唯一id用于将条目分组到分区表视图中

例如,使用下面的代码[un101、un098、un100、un099、un999]工作正常

self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number[2])}).sorted(by: {$0.0 < $1.0})
self.figuresByLetter=字典(分组:self.figures,按:{String($0.number[2])))。排序(按:{$0.0<$1.0})
并导致[(键:“0”,值:un098,un099),(键:“1”,值:un100,un101),(键:“9”,值:un999)]

当条目数超过1000条时,我在前面的条目中添加了一个前导零。我尝试将代码更新为:

self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number[3])}).sorted(by: {$0.0 < $1.0})
self.figuresByLetter=字典(分组:self.figures,按:{String($0.number[3])))。排序(按:{$0.0<$1.0})
现在结果是[(键:“0”,值:un0098,un0099,un1000,un1001),(键:“1”,值:un0100,un0101),(键:“9”,值:un0999)]

如何才能使条目的顺序正确

更新: 我找到了一个更简单的方法来完成我想要的

 self.figuresByLetter = Dictionary(grouping: self.figures, by: { String($0.number.prefix(4))}).sorted(by: {$0.0 < $1.0})
self.figuresByLetter=字典(分组:self.figures,按:{String($0.number.prefix(4))})。排序(按:{$0.0<$1.0})
如果“每个条目的两个字母都相同”,并且始终有四位数字,则只需排序:

let input = ["un0098", "un0099", "un1000", "un1001", "un1002", "un0100", "un0101"]
let output = input.sorted()
output // ["un0098", "un0099", "un0100", "un0101", "un1000", "un1001", "un1002"]
正如你所见,这是正确的答案

基于此,现在您可以继续分组到字典中并按键排序,如下所示:

let input = ["un0098", "un0099", "un1000", "un1001", "un1002", "un0100", "un0101"]
let output = input.sorted()

let d = Dictionary(grouping: output, by: { s -> String in
    let ix = s.index(s.startIndex, offsetBy:2)
    let ix2 = s.index(ix, offsetBy:2)
    return String(s[ix..<ix2])
})
let model = d.sorted{$0.key < $1.key}

如果这不是您想要的,那么应该很容易看到如何调整它。结构和顺序是正确的,因此如果数据的格式不符合要求,您现在可以对其进行更改。例如,如果您不喜欢键名称中的前导零,可以很容易地将其去掉。

0099
应小于
1000
。有什么问题吗<代码>0位于
1
之前,并且
99
小于
1000
ABC0001
位于
ABC0010
之前,它位于
ABC0100
之前,等等。因为当前编号为0098、0099、1000、1001、1002、0100、0101。这不可能。您应该编辑您的问题,以提供您正在使用的示例条目和您正在获得的输出(正如您刚才在评论中所做的那样),因为您目前所说的问题并不清楚。您认为
number[3]
是什么意思?显示实际输入和实际期望输出。如果我们没有输入数据,您的代码将毫无意义。感谢您的编辑,但“两个字母”在哪里?是的,但这并没有达到为我的分区表视图分组条目的目标。正如我所说的,在添加un1000以上的条目之前,一切都很顺利。是的,但在您的问题陈述中没有分组或表视图。这就是我的观点。如果你没有清楚地说出你真正的投入和你最终想要的答案,那你是无法帮助的。也要记住,字典没有顺序,所以没有排序这回事。请描述您试图实现的表格,我们可以告诉您如何构建生成该表格的模型数据。我理解您的观点。很难知道需要多少信息。我已经更新了问题。基本上,键决定部分,然后所有与键匹配的条目都添加到该部分。以前我有0-9节,代表所有条目001-999。现在,我想添加第10节来表示条目1000-1099。我的答案仍然是正确的,因为您按照错误的顺序进行。首先对数组进行排序,如我所示。现在分组。完成。
[(key: "00", value: ["un0098", "un0099"]), 
 (key: "01", value: ["un0100", "un0101"]), 
 (key: "10", value: ["un1000", "un1001", "un1002"])]