Hash Compare
BCS
BCS at pathlink.com
Wed Apr 18 10:46:00 PDT 2007
Johnny wrote:
> BCS Wrote:
>
>
>>Johnny wrote:
>>
>>>BCS Wrote:
>>>
>>>>Johnny wrote:
>>
>> >>
>>
>>>>>foreach (m; a.keys) {
>>>>> if ( b[m] ) {
>>>>> writefln("%s %s %s", m, a[m], b[m])
>>>>> }
>>>>> else {
>>>>> writefln("%s %s", m, a[m])
>>>>> }
>>>>>}
>>>>
>>>>foreach (k, v1; a) {
>>>> if ( auto v2 = k in b ) // is this what your looking for?
>>>> writefln("%s %s %s", k, v1, *v2)
>>>> else
>>>> writefln("%s %s", k, v1)
>>>>}
>>>
>>>A good hint. my problem is that I get an ArrayBounds error if i try it with my method.
>>>... an I can't catch it
>>
>>The "/a/ in /b/" construct fixes that. Just looking up the value should
>>do what you described if the value isn't their.
>
>
> I've tested it, and yes thank you very much it works fine!
> .. but still don't really understand what "auto v2 = m in b" means
> something like v2 = b.keys ?
>
actualy its about three cool features in one line
here is the slightly expanded vertion
foreach (k, v1; a)
{
int* v2 = k in b;
// return a pointer to the value assigned to key k in b
if (v2 !is null )
// if pointer is not null (key exists)
writefln("%s %s %s", k, v1, *v2)
else
// if pointer is null (key dosn't exist)
writefln("%s %s", k, v1)
}
the vertion I used uses type inference to avoid needing to know the type
and also uses the "declare and check a variable" feature.
http://www.digitalmars.com/d/expression.html#InExpression
http://www.digitalmars.com/d/statement.html#IfStatement
look for IfCondition and Declarator
More information about the Digitalmars-d-learn
mailing list