Iterating on a LIST
There are three Eiffel mechanisms to iterate on every element of a LIST
.
the across
loop
The across
can be used on every ITERABLE
object (including LIST
objects).
print_elements (a_list: LIST[INTEGER]) -- Print every elements on `a_list` do across a_list as ic loop print (ic.item.out + "%N") end end
Note that the temporary variable (ic
in the example) represents an iterator of the ITERABLE
object, and not directly an element like in many other languages (like the for
structure in Python for example).
the from until
loop syntax
This syntax offer more possibilities than the across
loop, but is riskier.
print_elements (a_list:LIST[INTEGER]) -- Print every elements on `a_list` do from a_list.start until a_list.exhausted loop print (a_list.item.out + "%N") a_list.forth end end
Using Eiffel agents and {LIST}.do_all, ....
It is possible to use agents in conjunction with the LIST
features do_all
, do_if
, there_exists
, and for_all
which are inherited from the class LINEAR
.
list_traversal_agents -- Example of traversing a list with do_all local a_list: LINKED_LIST [STRING] do -- Insert some elements in a_list create a_list.make a_list.extend ("The Moon Is Full") a_list.extend ("Master charge") a_list.extend ("Black cat bone") a_list.do_all (agent {STRING}.append (" - Albert Collins")) a_list.do_all (agent print_element) end print_element (a_element: STRING) -- Print `a_element` to standard output do io.put_string (a_element) io.put_new_line end