www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - foreach () processing sequence

reply jicman <cabrera wrc.xerox.com> writes:
Greetings!

Imagine this declarion,

char[] str = ["bb", "cc", "aa", "00", "11", "zz", "dd"];

when I do a,

foreach (char[] s; str)
  writefln(s);

assuming that the str array has not been touched or altered in any
way, will the sequence of execution **ALWAYS** follow the sequence
of the array creation?  In other words, will the execution of the
foreach above always display,

bb
cc
aa
00
11
zz
dd

Thanks,

josé
Feb 06 2007
parent reply Kirk McDonald <kirklin.mcdonald gmail.com> writes:
jicman wrote:
 Greetings!
 
 Imagine this declarion,
 
 char[] str = ["bb", "cc", "aa", "00", "11", "zz", "dd"];
 
 when I do a,
 
 foreach (char[] s; str)
   writefln(s);
 
 assuming that the str array has not been touched or altered in any
 way, will the sequence of execution **ALWAYS** follow the sequence
 of the array creation?  In other words, will the execution of the
 foreach above always display,
 
 bb
 cc
 aa
 00
 11
 zz
 dd
 
 Thanks,
 
 jos�

(Nitpick: The type of str is char[][].) Yes. An array is an ordered sequence. (As opposed to, say, a hash table, which is unordered.) -- Kirk McDonald Pyd: Wrapping Python with D http://pyd.dsource.org
Feb 06 2007
parent reply jicman <cabrera wrc.xerox.com> writes:
== Quote from Kirk McDonald's article
 jicman wrote:
 Greetings!

 Imagine this declarion,

 char[] str = ["bb", "cc", "aa", "00", "11", "zz", "dd"];

 when I do a,

 foreach (char[] s; str)
   writefln(s);

 assuming that the str array has not been touched or altered in


 way, will the sequence of execution **ALWAYS** follow the


 of the array creation?  In other words, will the execution of the
 foreach above always display,

 bb
 cc
 aa
 00
 11
 zz
 dd

 Thanks,

 jos�

Yes. An array is an ordered sequence. (As opposed to, say, a hash

 which is unordered.)

You're not nitpick, but acurate. :-) Ok, thanks.
Feb 06 2007
parent reply Johan Granberg <lijat.meREM OVE.gmail.com> writes:
jicman wrote:

 == Quote from Kirk McDonald's article
 jicman wrote:
 Greetings!

 Imagine this declarion,

 char[] str = ["bb", "cc", "aa", "00", "11", "zz", "dd"];

 when I do a,

 foreach (char[] s; str)
   writefln(s);

 assuming that the str array has not been touched or altered in


 way, will the sequence of execution **ALWAYS** follow the


 of the array creation?  In other words, will the execution of the
 foreach above always display,

 bb
 cc
 aa
 00
 11
 zz
 dd

 Thanks,

 jos�

Yes. An array is an ordered sequence. (As opposed to, say, a hash

 which is unordered.)

You're not nitpick, but acurate. :-) Ok, thanks.

I have wondered the same in the past. Is it documented somewhere? otherwise I think it should be.
Feb 06 2007
parent reply jicman <cabrera wrc.xerox.com> writes:
== Quote from Johan Granberg's article
 jicman wrote:
 == Quote from Kirk McDonald's article
 jicman wrote:
 Greetings!

 Imagine this declarion,

 char[] str = ["bb", "cc", "aa", "00", "11", "zz", "dd"];

 when I do a,

 foreach (char[] s; str)
   writefln(s);

 assuming that the str array has not been touched or altered in


 way, will the sequence of execution **ALWAYS** follow the


 of the array creation?  In other words, will the execution of




 foreach above always display,

 bb
 cc
 aa
 00
 11
 zz
 dd

 Thanks,

 jos�

Yes. An array is an ordered sequence. (As opposed to, say, a



 table,
 which is unordered.)

You're not nitpick, but acurate. :-) Ok, thanks.


 I think it should be.

I agree. I was just going to write a function to make sure that the the creation sequence was the sequence that it would execute on a foreach().
Feb 06 2007
parent Carlos Santander <csantander619 gmail.com> writes:
jicman escribió:
 == Quote from Johan Granberg's article
 jicman wrote:
 == Quote from Kirk McDonald's article
 jicman wrote:
 Greetings!
 
 Imagine this declarion,
 
 char[] str = ["bb", "cc", "aa", "00", "11", "zz", "dd"];
 
 when I do a,
 
 foreach (char[] s; str) writefln(s);
 
 assuming that the str array has not been touched or altered in


 way, will the sequence of execution **ALWAYS** follow the


 of the array creation?  In other words, will the execution of




 foreach above always display,
 
 bb cc aa 00 11 zz dd
 
 Thanks,
 
 jos�

sequence. (As opposed to, say, a



 table,
 which is unordered.)

Ok, thanks.


 I think it should be.

I agree. I was just going to write a function to make sure that the the creation sequence was the sequence that it would execute on a foreach().

Check http://www.digitalmars.com/d/statement.html#ForeachStatement :
 For foreach, the elements for the array are iterated over starting at index 0
 and continuing to the maximum of the array. For foreach_reverse, the array
 elements are visited in the reverse order.

-- Carlos Santander Bernal
Feb 06 2007