想创建三个优先队列放入一个数组中,还有没有更好更简洁的写法?
using DataStructures: PriorityQueue
PQTable = Array{PriorityQueue, 1}
pq_table = PQTable()
for i in 1:3
push!(pq_table, PriorityQueue{String, Int}(Base.Order.Reverse))
end
using DataStructures: PriorityQueue
PQTable = Array{PriorityQueue, 1}
pq_table = PQTable()
for i in 1:3
push!(pq_table, PriorityQueue{String, Int}(Base.Order.Reverse))
end
数据结构这一块我不太懂,不过看起来直接用list comprehension 就可以了
pq_table = [ PriorityQueue{String, Int}(Base.Order.Reverse) for _ in 1:3 ]
用repeat
julia> repeat([PriorityQueue{String,Int}(Base.Order.Reverse)], 3)
3-element Array{PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}},1}:
PriorityQueue()
PriorityQueue()
PriorityQueue()
这个是有问题的
julia> qs = repeat([PriorityQueue{String,Int}(Base.Order.Reverse)], 3)
3-element Array{PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}},1}:
PriorityQueue()
PriorityQueue()
PriorityQueue()
julia> push!(qs[1], "a" => 2)
2
julia> qs
3-element Array{PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}},1}:
PriorityQueue("a" => 2)
PriorityQueue("a" => 2)
PriorityQueue("a" => 2)
因为repeat只是复制了引用,所以它们指向的是同一个队列;修改一个,其他的也跟着在变
!!!
没主意到
不把我的代码po出来,永远不知道自己有多菜
如果能给社区提PR(修bug或者加demo)的话,其实是能得到很多这方面的反馈和锻炼的。
emmm 大概就是一种 “我帮你做一些杂事,你给我一些指导” 的交换,而且代码库的维护者在不忙的情况下会很愿意给出建议和说明。比如说有个刚接触 Images.jl 不久的同学在 document the difference between float32 and Float32, etc. by mgautam98 · Pull Request #146 · JuliaImages/juliaimages.github.io · GitHub 这里就只是补充了一部分文档,然后 我和 TimHoly 就给了远超过他工作量的反馈。
列表推导的和我提的长版本有点区别就是 语义 不太一样
pq_table
:# 我可以在里面放入不同类型的队列
julia> push!(pq_table, PriorityQueue{Int, String}())
4-element Array{PriorityQueue,1}:
PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}}()
PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}}()
PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}}()
PriorityQueue{Int64,String,Base.Order.ForwardOrdering}()
julia> pq_table
3-element Array{PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}},1}:
PriorityQueue("12" => 3,"1" => 2)
PriorityQueue()
PriorityQueue()
这种情况下的话,在[]
前面加上类型标记就好了:
julia> pq_table = PriorityQueue[ PriorityQueue{String, Int}(Base.Order.Reverse) for _ in 1:3 ]
3-element Array{PriorityQueue,1}:
PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}}()
PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}}()
PriorityQueue{String,Int64,Base.Order.ReverseOrdering{Base.Order.ForwardOrdering}}()
我也愿意!做些翻译什么么?