首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在领域中对WBS格式的字符串进行排序?

如何在领域中对WBS格式的字符串进行排序?
EN

Stack Overflow用户
提问于 2019-05-28 15:45:57
回答 1查看 63关注 0票数 0

我想使用Realm对象的其中一个属性对其进行排序。它有类似WBS的格式(1.1.3 ,1.1.11等),使用字符串作为它的类型。

我正在使用RealmSwift 3.11.2,并且我已经尝试过使用排序(by:),并且它是有效的!但1.1.10和1.1.11将在1.1.2之前排序

这是我正在使用的代码

代码语言:javascript
复制
tasks = tasks.sorted(byKeyPath: "wbs", ascending: true)

我希望输出的顺序是正确的,比如1.1.2,1.1.10,1.1.11。

感谢任何帮助,我在这里一片空白,有没有办法在领域中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 20:15:00

您可能需要花点时间在Internet上对字符串进行排序搜索。

问题是,如果你有一个类似于1,2,3,10的字符串列表,它们被排序,它们将排序为1,10,2,3。

这是因为字符串的排序方式;在本例中,它们通常按字符串中的第一个字母/对象(1's)排序,然后按第二个字母(0)排序,依此类推,因此以1开头的字符串被组合在一起。然后是2,等等。

因此,您需要填充它们,以便格式相同,如下所示

代码语言:javascript
复制
01.01.02, 01.01.10, 01.01.11 etc

它将正确排序或将三个部分以数字(Int)的形式存储在单独的属性中

代码语言:javascript
复制
class TriadClass {
    var first = 0
    var second = 0
    var third = 0

    init(x: Int, y: Int, z: Int) {
        self.first = x
        self.second = y
        self.third = z
    }

    func getPaddedString() -> String {
        let formatter = NumberFormatter()
        formatter.format = "00"

        let firstNum = NSNumber(value: self.first)
        let secondNum = NSNumber(value: self.second)
        let thirdNum = NSNumber(value: self.third)

        let firstString = formatter.string(from: firstNum)
        let secondString = formatter.string(from: secondNum)
        let thirdString = formatter.string(from: thirdNum)

        let finalString = "\(firstString!).\(secondString!).\(thirdString!)"

        return finalString
    }

    func getPureString() -> String {
        let formatter = NumberFormatter()
        formatter.format = "0"

        let firstNum = NSNumber(value: self.first)
        let secondNum = NSNumber(value: self.second)
        let thirdNum = NSNumber(value: self.third)

        let firstString = formatter.string(from: firstNum)
        let secondString = formatter.string(from: secondNum)
        let thirdString = formatter.string(from: thirdNum)

        let finalString = "\(firstString!).\(secondString!).\(thirdString!)"

        return finalString
    }
}

然后按第一、第二和第三排序。为了获得要在UI中显示的数字,我将其包含到函数中以对其进行格式化。注这两个函数都可以通过我让它们变得冗长来大大改进和缩短,这样您就可以逐步完成它们。

其用法为

代码语言:javascript
复制
let myNum = TriadClass(x: 1, y: 1, z: 10)
let paddedString = myNum.getPaddedString()
print(paddedString)

let nonPaddedString = myNum.getPureString()
print(nonPaddedString)

和输出

代码语言:javascript
复制
01.01.10
1.1.10

还有许多其他的解决方案,但这两个是一个起点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56337339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档