Kevin is working on a sorted dict as we speak:
https://github.com/JuliaLang/DataStructures.jl/pull/43

On Wed, 2014-06-18 at 13:03, [email protected] wrote:
> I re-read your original post.  There are iterators available for
> Associative  KeyIterator{T<:Associative}, ValueIterator{T<:Associative}
> and the usual iterator which returns key and value as a tuple.  These
> are all also available for the dicts in DataStructures.jl.  So you can
> do
>
> for (key, val) in dict
>     ...    
> end
>
> or 
>
> for key in KeyIterator(dict)
>     ...
> end
>
> The OrderedDict there keeps to order of insertion.  I think there is no
> dict which keeps the keys sorted.
>
> On Wed, 2014-06-18 at 12:41, [email protected] wrote:
>> Dear Julia colleagues,
>>
>> Earlier I asked whether there is a datatype similar to "map<K,D>" from C++, 
>> and nobody answered, so I decided as my first nontrivial Julia program to 
>> write such a type.  This is an associative array (i.e., a dictionary), with 
>> the added property that the keys have a sort-order, and it is possible to 
>> loop over the items in the array in this order.  I am using a 2-3 tree as 
>> the implementation.  My main data structure looks like this:
>>
>> type Map{K,D}
>>    ...
>>     function Map{K,D}()
>>     ....
>>     end
>> end
>
> Probably better use a name containing `Dict` as that is the convention
> in Julia.  Also, probably you want to make it a subtype of
> Associative(K,V}.  Have  a look at base/dict.jl.
>
>> But I am stuck right at the outset with two very basic Julia questions. 
>>  First, what is the syntax for a user of my datatype to declare a variable 
>> to be an empty map of a certain type?  In other words, suppose the user 
>> wants a map from strings to strings:
>>
>> function test1()
>>     m1 = Map{ASCIIString, ASCIIString}()
>>     m1["hello"] = "jello"
>> end
>>
>>
>> This gave the error: ERROR: no method Map{ASCIIString, ASCIIString}().   
>> What is the right syntax to invoke the default constructor for an empty 
>> map?  I couldn't figure this out from the manual; in the manual, the 
>> constructors either take arguments or else they are constructors for 
>> built-ins (like arrays) that have a special syntax like a = Int[].
>
> Presumably you've read: 
> http://docs.julialang.org/en/latest/manual/constructors/
>
> Anyway, this is a often encountered problem.  Have a look through the
> mailing list.  Basically, if you define an inner constructor you also
> have to define an outer one.
>
>> Second, at various points in the code, I need to use a default or blank 
>> instance of either K (the key type) or D (the datatype).  In other words, I 
>> need to initialize an array element whose type is a composite type that has 
>> some K or D fields; these need to be initialized to some arbitrary K or D 
>> value that won't ever be used. What is the proper syntax to initialize a 
>> field k to have a value of type K (where K is a parameter type in my code), 
>> where the value doesn't matter (can be any default).
>
> Array(Int, 10)
> or
> Array(String, 10)

-- 

Reply via email to