BLS schrieb:
Andrei Alexandrescu schrieb:
Jarrett Billingsley wrote:
On Sun, Jan 18, 2009 at 1:00 PM, dsimcha <[email protected]> wrote:
Nice. Glad to see that this is documented somewhere so I can start
playing with
it. One thing, though: In my dstats library, I have a custom hash
table
implementation that's used very heavily in my information theory
module. (I have
my reasons for using a custom hash table instead of the builtin, but
they're
beyond the scope of this post.) Right now, the hash table uses
opApply. Now that
I realize how horribly slow opApply is, I'd like to port this to
ranges. However,
I need to be able to iterate over either key, value pairs or just
values. Is
there any way to make this work with ranges?
You could handle key or value iteration by using a proxy struct type
that follows the range protocol, and have your hash table return one
of those structs from methods such as "keysIter" or "valuesIter". But
unless I'm mistaken, D2 still doesn't support returning tuples, so you
still can't have keys _and_ values at the same time. (Unless you're
content with using a Pair or something.)
Returning a std.typecons.Tuple is entirely possible.
Andrei
tuple(K,V) foo(K,V)(K k, V v)
{
...
}
????, I have no idea, pls help Bjoern
Look like this works... However it would be nice if we could place the
alias Tuple Pair stuff outside of foo()
module tt;
import std.stdio;
import std.typecons;
//alias Tuple!(K, "key", V, "value") Pair; This don't work
auto foo(K,V)(K k, V v)
{
alias Tuple!(K, "key", V, "value") Pair;
Pair P;
P.key = ++k;
P.value = v;
return P;
}
void main()
{
//Pair KV;
auto KV = foo!(int,string) (10,"Hello");
writefln("%8s %s\n", KV.key, KV.value);
}
This is a really nice feature, guess there are smarter ways to implement
tuple returns..
Bjoern