我有一個包含單個項目的集合,在這種情況下的字符串:如何在包含單一項目的一組檢索唯一項目
b = Set(["A"])
我想拿到單項出來。這樣做的最好方法是什麼?我可以找出做到這一點的唯一方法是使用一個循環:
single_item = ""
for item in b
single_item = item
end
它得到我什麼,我需要
julia> single_item
"A"
,但我覺得必須有一個更簡單的方法。
我有一個包含單個項目的集合,在這種情況下的字符串:如何在包含單一項目的一組檢索唯一項目
b = Set(["A"])
我想拿到單項出來。這樣做的最好方法是什麼?我可以找出做到這一點的唯一方法是使用一個循環:
single_item = ""
for item in b
single_item = item
end
它得到我什麼,我需要
julia> single_item
"A"
,但我覺得必須有一個更簡單的方法。
我建議first
julia> b = Set(["A"])
Set(ASCIIString["A"])
julia> first(b)
"A"
我們可以分析這個,看看分配數量。 (因爲內存分配很慢)。由於這是一次運行,我會忽略實際的時間。 顯示的結果是每次調用的第二次運行。 b
宣佈爲const
。
julia> @time first(b)
0.000003 seconds (4 allocations: 160 bytes)
"A"
julia> @time collect(b)[1]
0.000005 seconds (5 allocations: 240 bytes)
"A"
julia> @time first(next(b,start(b)))
0.000007 seconds (5 allocations: 192 bytes)
"A"
怎麼樣
julia> collect(b)[1]
"A"
編輯
傳說中的丹·蓋茨的建議,可考慮做
julia> collect(take(b,1))[1]
"A"
如果記憶是一個問題
啊哈,收集變成一個數組,我不知道。謝謝,那太好了! –
這可能可以爲'collect(b)'分配一個完整的向量。 'collect(take(b,1))[1]'可能更有效率,甚至更低級別:'first(next(b,start(b)))' –
風格瑣事:我看到人們更喜歡當預期列表中只有一個項目時,使用'[]'而不是'[1]'作爲指示這種情況的直觀方式。 –
謝謝@Oxinabox,不記得'first'這個變種。 「第一(b)」的分配實際上是一種測量工件,沒有進行分配。查看執行內部甚至可以使用以下實現再次實現性能:'getsingleton(x :: Set {String})= x.dict.count == 1? x.dict.keys [findfirst(x.dict.slots,0x1)]:throw(ArgumentError(「must be a singleton」))'。加載BenchmarkTools包後使用'@benchmark getsingleton(b)'。 –
是的,我打算這樣評論,但分心了。謝謝。隨意編輯。 –