2017-09-20 157 views
2

我有一堆整數ns其中0 < = n < = 9對於所有n in。我需要將它們保存爲字符或字符串。我用@time比較內存使用情況,我得到這個:如何將整數轉換爲字符

julia> @time a = "a" 
    0.000010 seconds (84 allocations: 6.436 KiB) 
"a" 

julia> @time a = 'a' 
    0.000004 seconds (4 allocations: 160 bytes) 
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase) 
  1. 爲什麼如此巨大的差異?

我選擇將整數轉換爲字符,但我不明白什麼是正確的方法來做到這一點。當我在REPL中做Char(1)時,我得到'\x01': ASCII/Unicode U+0001 (category Cc: Other, control),如果我嘗試打印它,我會得到這個符號:。

相反,當我在REPL中做'1'時,我得到'1': ASCII/Unicode U+0031 (category Nd: Number, decimal digit),如果我打印它,我得到1。這是我想要的行爲。

  1. 如何實現它?

我想到了創建字典分配給每個整數它對應的字符,但我敢肯定這是不是要走的路...

+2

使用'CHAR(N + '0')'。這將增加'0'數字的ASCII偏移量並修復其餘的數字。 –

+2

用@時間計時有點麻煩,特別是對於非常小的操作。嘗試使用來自BenchmarkTools.jl的'@ btime'或'@ benchmark',使用映射的 –

回答

3

使用Char(n + '0')。這將添加0數字的ASCII偏移量並修復其餘數字。例如:

julia> a = 5 
5 

julia> Char(a+'0') 
'5': ASCII/Unicode U+0035 (category Nd: Number, decimal digit) 

還要注意,與@time時間是有點問題的,特別是對於非常小的操作。最好使用BenchmarkTools.jl中的@btime@benchmark

1

你可能需要類似:

julia> bunch_of_integers = [1, 2, 3, 4, 5] 

julia> String(map(x->x+'0', bunch_of_integers)) 
"12345" 

或類似的東西:

julia> map(Char, bunch_of_integers.+'0') 
5-element Array{Char,1}: 
'1' 
'2' 
'3' 
'4' 
'5' 
+0

似乎是矯枉過正!但是當我第一次嘗試'bunch_of_integers。+'0''時,它返回了'Array {Int64,1}:[49,50,51,52,53]'也許我的REPL被溢出(或者是越野車)...... – Liso