drajib
drajib

Reputation: 53

How to get the index of FOREACH iterations

Within a FOREACH statement [e.g. day in range(dayX, dayY)] is there an easy way to find out the index of the iteration ?

Upvotes: 1

Views: 2091

Answers (2)

cybersam
cybersam

Reputation: 67044

Yes, you can.

Here is an example query that creates 8 Day nodes that contain an index and day:

WITH 5 AS day1, 12 AS day2
FOREACH (i IN RANGE(0, day2-day1) | 
         CREATE (:Day { index: i, day: day1+i }));

This query prints out the resulting nodes:

MATCH (d:Day)
RETURN d
ORDER BY d.index;

and here is an example result:

+--------------------------+
| d                        |
+--------------------------+
| Node[54]{day:5,index:0}  |
| Node[55]{day:6,index:1}  |
| Node[56]{day:7,index:2}  |
| Node[57]{day:8,index:3}  |
| Node[58]{day:9,index:4}  |
| Node[59]{day:10,index:5} |
| Node[60]{day:11,index:6} |
| Node[61]{day:12,index:7} |
+--------------------------+

Upvotes: 2

William Lyon
William Lyon

Reputation: 8556

FOREACH does not yield the index during iteration. If you want the index you can use a combination of range and UNWIND like this:

WITH ["some", "array", "of", "things"] AS things
UNWIND range(0,size(things)-2) AS i
// Do something for each element in the array. In this case connect two Things
MERGE (t1:Thing {name:things[i]})-[:RELATED_TO]->(t2:Thing {name:things[i+1]})

This example iterates a counter i over which you can use to access the item at index i in the array.

Upvotes: 2

Related Questions