iOS造轮子-数字金额每隔3位用逗号隔开(Swift实现)

背景概述

金融类App不可避免的需要展示金额信息,如¥12345678元,但当金额数值较大时,将一整串的金额显示在用户面前显然不够友好,所以业内通用做法是每隔3位添加一逗号,即显示成¥12,45,678元,极大地提升了用户体验。

Swift 代码实现

/**
 * 将字符串每隔数位用分割符隔开
 *
 * @param source 目标字符串
 * @param gap    相隔位数,默认为3
 * @param gap    分割符,默认为逗号
 * @return       用指定分隔符每隔指定位数隔开的字符串
 *
 */
func showInComma(source: String, gap: Int=3, seperator: Character=",") -> String {
        var temp = source
        /* 获取目标字符串的长度 */
        let count = temp.count
        /* 计算需要插入的【分割符】数 */
        let sepNum = count / gap
        /* 若计算得出的【分割符】数小于1,则无需插入 */
        guard sepNum >= 1 else {
            return temp
        }
        /* 插入【分割符】 */
        for i in 1...sepNum {
            /* 计算【分割符】插入的位置 */
            let index = count - gap * i
            /* 若计算得出的【分隔符】的位置等于0,则说明目标字符串的长度为【分割位】的整数倍,如将【123456】分割成【123,456】,此时如果再插入【分割符】,则会变成【,123,456】 */
            guard index != 0 else {
                break
            }
            /* 执行插入【分割符】 */
            temp.insert(seperator, at: temp.index(temp.startIndex, offsetBy: index))
        }
        return temp
}

//测试调用
print(showInComma(source: "1234567")) //输出1,234,567
print(showInComma(source: "1234567", gap: 4, seperator: "#")) //输出123#4567

图示代码执行原理

算法复杂度分析

  • 本案通过逗号每隔3位分隔字符串,换一个角度考虑,其实就是从字符串尾部每隔3位插入一个逗号,自然的,我们可以借鉴直接插入排序的思想。
  • 代码分析可知,上述方法主要耗时点在于插入分割符时其他元素的移动,因此时间复杂度为0(n)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值