Thread overview
Simple Array Question
Jun 01, 2007
Silv3r
Jun 01, 2007
Johan Granberg
Jun 01, 2007
BCS
Jun 01, 2007
BCS
Jun 02, 2007
Silv3r
June 01, 2007
When using multi-dimensional arrays I easily get confused as to the order of the notation. But why does args[i][] equal args[][i] (code below)? I assume args[i][] is the more correct version as only args[i][0] gives the correct results?

-Silv3r

-----------------------------------------------------------------------
import std.stdio;

void main(char[][] args)
{
 writefln("args.length = %d\n", args.length);
 for (int i = 0; i < args.length; i++)
 {
  if(args[i][] == args[][i]) // why does args[i][] equal args[][i]?
   writefln("Why does this work? [%d] = '%s'", i, args[i][]);
  writefln("<%s>,<%s>", args[i][0],args[0][i]);
 }
}
-----------------------------------------------------------------------
June 01, 2007
Silv3r wrote:

> When using multi-dimensional arrays I easily get confused as to the order of the notation. But why does args[i][] equal args[][i] (code below)? I assume args[i][] is the more correct version as only args[i][0] gives the correct results?
> 
> -Silv3r
> 
> -----------------------------------------------------------------------
> import std.stdio;
> 
> void main(char[][] args)
> {
>  writefln("args.length = %d\n", args.length);
>  for (int i = 0; i < args.length; i++)
>  {
>   if(args[i][] == args[][i]) // why does args[i][] equal args[][i]?
>    writefln("Why does this work? [%d] = '%s'", i, args[i][]);
>   writefln("<%s>,<%s>", args[i][0],args[0][i]);
>  }
> }
> -----------------------------------------------------------------------

ok, first args[] is the same as writing only args as a slice of an entire dynamic array is itself.

second think of the array brackets as a stack

(char[])[] args

so args is an array (of char arrays)
if you take an element of that you eliminate the outer brackets
char[] a=args[0];

hope this helps and if I misunderstood the question I'm sorry.
June 01, 2007
Reply to Silv3r,

> When using multi-dimensional arrays I easily get confused as to the
> order of the notation. But why does args[i][] equal args[][i] (code
> below)? I assume args[i][] is the more correct version as only
> args[i][0] gives the correct results?
> 
> -Silv3r
> 

> if(args[i][] == args[][i]) // why does args[i][] equal args[][i]?

args[i][] == get args[i], take all of it as a slice
args[][i] == get all of args as a slice, take [i] of it

in an expression [] is the same as [0..$]


June 01, 2007
Reply to BCS,

This reminds me of something I have been finding handy recently:

//take a slice starting at i and of length j:
arr[i..$][0..j]

the alternative is a bit uglier IMHO

arr[i..i+j]


June 02, 2007
Thanks, now I understand arrays a bit better!