Swift 自定义基数列(+;特殊字符)

Swift 自定义基数列(+;特殊字符),swift,string,numbers,Swift,String,Numbers,目前,我正在使用此代码将数字转换为base36-字符串: let number = 300293338 let base36 = String(number, radix: 36); print(base36) // 4ysbtm 但我想知道如何使用Swift生成我自己的字母表,并将其转换为Base10到AnyBase 字母表的一个例子如下: ["$", "%", "&", "/", "(", "9", "=", "?", "+", "#", "-", ".", ">", "&l

目前,我正在使用此代码将数字转换为base36-字符串:

let number = 300293338
let base36 = String(number, radix: 36);
print(base36) // 4ysbtm
但我想知道如何使用Swift生成我自己的字母表,并将其转换为Base10到AnyBase

字母表的一个例子如下:

["$", "%", "&", "/", "(", "9", "=", "?", "+", "#", "-", ".", ">", "<", "*", "!", ...]
let number = 300293338
let base36 = mycoolfunction(number)
print(base36) // "$%//+#="

如何使用基本基数10到任意基数转换,针对自定义数字进行修改:

func numberToCustomRadix(_ number: Int, alphabet: String) -> String {
    let base = alphabet.count
    var number = number
    var result = ""
    repeat {
        let idx = alphabet.index(alphabet.startIndex, offsetBy: number % base)
        result = [alphabet[idx]] + result
        number /= base
    } while number > 0
    return result
}

numberToCustomRadix(3, alphabet: "012") // 10
numberToCustomRadix(4, alphabet: "abc") // bb
numberToCustomRadix(5, alphabet: "%#9") // #9
请注意,自定义字母表的问题在于,在编译时很难保证字母表包含不同的字符。例如,“aaabbccc”字母表将产生各种转换问题



所以你有一种“密码”,用你自己的数字字符替换以36为基数的字符串的数字字符?然后做你正在做的,然后用数字字符串替换原始字符。嗯,这有点模糊,你说呢?我甚至不知道“应付……50”是什么意思,我猜你也不知道。如果你不能清楚地说出一个数字在你想象的“系统”下被表示为字符串的规则,你就不可能编写一个执行这些规则的计算机程序。相反地,如果你能阐明规则,那么程序的编写速度是十分之九。@Jonas0000可以“解码”,但这是另一个问题,因此我们通常不会在一个问题中解决多个问题,特别是如果问题中没有指定其他问题(但要小心,在同一篇文章中问多个问题可能会因为内容太宽泛而关闭你的文章)如果您想要唯一的字符,请要求它们传递一个
Set
@vacawama a
Set
将解决唯一性问题,但是在运行时仍然会发生唯一性异常,这可能会导致意外行为。我还以为
Set
是无序的,所以这不起作用。NVM.@vacawama哦,是的,忘了t帽子:)