如何将*正*数转换为Swift中的数字数组

时间:2015-01-02 01:15:08

标签: swift

我想将号码转换为相应的数字列表 - 数字也应该是Ints。

转换时,比如1024,它应该返回[1,0,2,4]

3 个答案:

答案 0 :(得分:6)

在Swift2和Swift3中

function GetPictureFromBitmap([System.Drawing.Bitmap]$bitmap)
{
    $converter = New-Object -TypeName System.Drawing.ImageConverter
    $byte_vec = New-Object -TypeName TagLib.ByteVector -ArgumentList $converter.ConvertTo($bitmap, [byte[]])
    $picture = New-Object -TypeName TagLib.Picture -ArgumentList $byte_vec
    $picture_list = New-Object TagLib.IPicture[] 1
    $picture_list[0] = $picture
    return $picture_list
}


$refs = @(
"c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll",
"d:\taglib-sharp.dll"
)

Add-Type -Path $refs

# Load MP3 file
$media = [TagLib.File]::Create("C:\MusicFile.mp3")

# Load picture into System.Drawing.Image
[Bitmap]$pic = [System.Drawing.Image]::FromFile("C:\MyAlbumArt.jpg")

# Add picture to MP3
$media.Tag.Pictures = GetPictureFromBitmap($pic)

# Save Mp3 
$media.Save() 

在Swift4中

let number = 1024
let digits = String(number).characters.flatMap { Int(String($0)) }
print(digits) // [1, 0, 2, 4]

答案 1 :(得分:2)

您不需要先将其转换为数组。由于字符串是集合,因此您可以使用map的免费(非成员)版本:

map(number) { String($0).toInt() }

但要注意你的!。如果number包含非数字数字,则代码将在运行时崩溃。如果数字为负数,则以“ - ”开头。

您希望如何处理这取决于您想要对负数做什么(可能您希望所有数字都为负数)。但如果你只是想抛弃领先的“ - ”,你可以做类似的事情:

let strNum = number >= 0 ? String(number) : dropFirst(String(number))
let digits = map(strNum) { String($0).toInt()! }

但是,如果有一个整数字符串表示的另一个可能的非数字字符,你可能会发现它更好:

let digits = map(String(number)) { String($0).toInt() }.filter { $0 != nil }.map { $0! }

答案 2 :(得分:1)

在使用Swift REPL进行一些搜索和一些试错法后,我想出了这个

var digits:[Int] = Array(String(number)).map { String($0).toInt()! }

请注意,!至关重要