Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中拆分或迭代整数而不转换为字符串_Swift - Fatal编程技术网

如何在Swift中拆分或迭代整数而不转换为字符串

如何在Swift中拆分或迭代整数而不转换为字符串,swift,Swift,我想知道在Swift中是否有一种方法可以将整型分解为单个数字,而不将其转换为字符串。例如: let x: Int = 12345 //Some way to loop/iterate over x's digits //Then map each digit in x to it's String value //Return "12345" 作为一点背景,我正在尝试创建自己的方法,将Int转换为字符串,而不使用String description属性或字符串插值 我在这个网站上找到了各种各样

我想知道在Swift中是否有一种方法可以将整型分解为单个数字,而不将其转换为字符串。例如:

let x: Int = 12345
//Some way to loop/iterate over x's digits
//Then map each digit in x to it's String value
//Return "12345"
作为一点背景,我正在尝试创建自己的方法,将Int转换为字符串,而不使用String description属性或字符串插值

我在这个网站上找到了各种各样的文章,但我能找到的所有文章要么以字符串开头,要么最终使用字符串描述属性将Int转换为字符串


谢谢

继续除以10,取余数:

extension Int {
    func digits() -> [Int] {
        var digits: [Int] = []
        var num = self
        repeat {
            digits.append(num % 10)
            num /= 10
        } while num != 0
        return digits.reversed()
    }
}

x.digits() // [1,2,3,4,5]
请注意,如果值为负数,这将返回所有负数。如果您想以不同的方式处理,可以添加一个特殊情况。此返回0的
[0]
,这可能是您想要的

因为每个人都喜欢纯函数式编程,所以你也可以这样做:

func digits() -> [Int] {
    let partials = sequence(first: self) {
        let p = $0 / 10
        guard p != 0 else { return nil }
        return p
    }

    return partials.reversed().map { $0 % 10 }
}

(但我可能只是在这里使用循环。我发现在大多数情况下,
序列
太难推理了。)

只要继续除以10,然后取余数:

extension Int {
    func digits() -> [Int] {
        var digits: [Int] = []
        var num = self
        repeat {
            digits.append(num % 10)
            num /= 10
        } while num != 0
        return digits.reversed()
    }
}

x.digits() // [1,2,3,4,5]
请注意,如果值为负数,这将返回所有负数。如果您想以不同的方式处理,可以添加一个特殊情况。此返回0的
[0]
,这可能是您想要的

因为每个人都喜欢纯函数式编程,所以你也可以这样做:

func digits() -> [Int] {
    let partials = sequence(first: self) {
        let p = $0 / 10
        guard p != 0 else { return nil }
        return p
    }

    return partials.reversed().map { $0 % 10 }
}
(但我可能只是在这里使用循环。我发现在大多数情况下,
序列
太难推理。)

一种递归方式

extension Int {
    func createDigitArray() -> [Int] {
        if self < 10 {
            return [self]
        } else {
            return (self / 10).createDigitArray() + [self % 10]
        }
    }
}
12345.createDigitArray() //->[1, 2, 3, 4, 5]
extension Int{
func createDigitArray()->[Int]{
如果self<10{
返回[自我]
}否则{
返回(self/10).createDigitArray()+[self%10]
}
}
}
12345.createDigitArray()/->[1,2,3,4,5]
一种递归方式

extension Int {
    func createDigitArray() -> [Int] {
        if self < 10 {
            return [self]
        } else {
            return (self / 10).createDigitArray() + [self % 10]
        }
    }
}
12345.createDigitArray() //->[1, 2, 3, 4, 5]
extension Int{
func createDigitArray()->[Int]{
如果self<10{
返回[自我]
}否则{
返回(self/10).createDigitArray()+[self%10]
}
}
}
12345.createDigitArray()/->[1,2,3,4,5]

一个非常简单的方法是使用此功能:

func getDigits(of number: Int) -> [Int] {
    var digits = [Int]()
    var x = number
    repeat{
        digits.insert(abs(x % 10), at: 0)
        x/=10
    } while x != 0

    return digits
}
然后像这样使用它:

getDigits(of: 97531) // [9,7,5,3,1]
getDigits(of: -97531) // [9,7,5,3,1]
如您所见,对于负数,您将接收其数字数组,但其绝对值为(例如:
-9=>9
-99982=>99982


希望有帮助

一个非常简单的方法是使用此函数:

func getDigits(of number: Int) -> [Int] {
    var digits = [Int]()
    var x = number
    repeat{
        digits.insert(abs(x % 10), at: 0)
        x/=10
    } while x != 0

    return digits
}
然后像这样使用它:

getDigits(of: 97531) // [9,7,5,3,1]
getDigits(of: -97531) // [9,7,5,3,1]
如您所见,对于负数,您将接收其数字数组,但其绝对值为(例如:
-9=>9
-99982=>99982


希望有帮助

你可能也应该像另一个答案那样解决负数。在您的解决方案中,负数有负数。只需附加
abs(num%10)
而不是
num%10
,因为
-9992
不是由
-9
-9
-9
-2
构成的,而是由
-9
构成的(3次)和
2
如果
digits
函数接受
radix
参数(10可能是默认值),则会更好。您可能也应该像其他答案一样解决负数问题。在您的解决方案中,负数有负数。只需附加
abs(num%10)
而不是
num%10
,因为
-9992
不是由
-9
-9
-9
-2
构成的,而是由
-9
构成的(3次)而
2
如果
digits
函数接受
radix
参数(10可能是默认值),则会更好。不适用于负数,由于它返回的是整数而不是数字…如果self<10&&self>=0,则应将条件更改为
,并处理<0不适用于负数的情况下的数字前面的
-
,由于它返回的是整数而不是数字……如果self<10&&self>=0
,则应将条件更改为
,并在<0的情况下处理数字前面的
-