Thanks a lot Alan, you're right. I think i oversimplified my example.

The problem is that once you start nesting loops and try to make it more
dynamic code gets ugly quite fast. Eg, this is a bit more complex with
just one nested loop:

I have a set of boxes sorted by color and i want to do something with
each color. The array is sorted by color so this algorithm should
work.

<cfloop index="x" from="1" to="ArrayLen(boxes)">
  <cfset samecolorboxes =ArrayNew(1)/>
  <cfset ArrayAppend(samecolorboxes, boxes[x])/>

  <!--- If there is more than one box with the same color --->
  <cfif x LT ArrayLen(boxes) AND boxes[x+1].color EQ boxes[x].color>
    <cfloop index="y" from="x+1" to="ArrayLen(boxes)">
      <cfif boxes[y].color EQ boxes[y-1].color>
        <cfset ArrayAppend(samecolorboxes,boxes[y])/>
      <cfelse>
        <cfset x=y/>
        <cfbreak/>
      </cfif>
    </cfloop>
  </cfif>
  <cfset DoSomething(samecolorboxes)/>
</cfloop>

Of course i could just do:

<cfset samecolorboxes = ArrayNew(1)/>
<cfloop index="x" from="1" to="ArrayLen(boxes)">
  <cfset ArrayAppend(samecolorboxes, boxes[x])/>
  <cfif x is arraylen(boxes) or boxes[x].color is not boxes[x+1].color >
    <cfset DoSomething(samecolorboxes)/>
    <cfset samecolorboxes = ArrayNew(1)/>
  </cfif>
</cfloop>

But i'm trying to show an example of an use case where it might be
useful to modify an index variable or skip more than one iteration
on a nested loop.

I'm a sysadmin with C skills and i'm learning CFML right now, so i
might be trying to do something in a very complex way that's easily
solvable in other way in CFML, but i just find weird that i'm not able
to modify index values. Is there any way of modifying index values or
some reason for not being able to do it?

Thanks a lot.
Regards.

On Tue, 2010-06-15 at 17:04 +0100, Alan Williamson wrote:
> yes you can ....
> 
> <cfloop index="x" from="1" to="50">
>    <cfoutput>#x# </cfoutput>
> 
>    <cfif (x > 5) && (x < 20)>
>      <cfcontinue>
>    </cfif>
> </cfloop>
> 
> 
> 
> Victor Balada Diaz wrote:
> > Hello Alan,
> >
> > The problem with cfcontinue is that you can't skip in a clean way eg, 20
> > iterations. There is no such thing as cfcontinue times="20" nor just an
> > easy way to switch to a fixed position in the index, so i can not
> > achieve what i'm trying to do with cfcontinue. Do you have any other
> > idea?
> 

-- 
Open BlueDragon Public Mailing List
 http://www.openbluedragon.org/   http://twitter.com/OpenBlueDragon
 online manual: http://www.openbluedragon.org/manual/

 mailing list - http://groups.google.com/group/openbd?hl=en

Reply via email to