multiple-item traversal ranges
spir
denis.spir at gmail.com
Wed Mar 30 07:11:41 PDT 2011
Hello,
I take the opportunity of opSlice() now seemingly working (see // thread) to
talk about one of the last annoying points for everyday use of ranges for
traversal: the absence of "key-ed traversal", or more generally "multi-item
traversal", as in:
foreach (k,v ; myTable) {...}
After some thought on the topic, I would push for a solution where collection
types which should provide such multi-item traversal methods, would define a
specific struct, eg:
struct Map (K,V) {
struct Pair { K key ; V value; }
struct Range {
@property Pair front () {
assert (! this.empty);
Return Pair(...);
}
...
}
Range opSlice () {
return Range(this);
}
...
}
The advantages of this solution are:
1. It only uses struct: a builtin, simple & efficient feature.
2. It works *now*, as is; it is just a standard to promote.
3. It trivially allows multiple ranges for the same collection type.
4. It is easy to use & understand on the caller side:
foreach (pair ; map) {
doSomethingWith(pair.key, pair.value);
}
foreach (record ; table) {
doSomethingWith(record.name, record.phone, record.mail);
}
Denis
--
_________________
vita es estrany
spir.wikidot.com
More information about the Digitalmars-d
mailing list