TransWikia.com

How to use the iterator in Mathematica

Mathematica Asked by yode on January 31, 2021

I find that Mathematica has the iterator data structure. We can build some iterators like this:

Constant iterator

GeneralUtilities`ConstantIterator[5]

Key value iterator

GeneralUtilities`KeyValueIterator[<|a -> x, b -> y, c -> z|>]

Range iterator

GeneralUtilities`RangeIterator[9]

We can find all iterator functions with

Names["GeneralUtilities`*Iterator*"]

But I don’t know how to process the iterator, as Mathematica has no function like next on Python:

>>> string='FhC'
>>> it=iter(string)
>>> next(it)
'F'
>>> next(it)
'h'

Update

Michael E2’s answer clear this problem a lot,But I hope the DelegateIterator, IteratorGraph, JoinMapIterator, SingletonIterator, StreamIterator, TerminatorIterator and ToIterator can be discussed still.

One Answer

Such functions set up a one-time iterator, i.e. a GeneralUtilities`Iterator. Its functionality may be inspected with

? GeneralUtilities`Iterator

and so forth. Except for a ConstantIterator which always returns the same value (forever), they go sequentially through values until they return GeneralUtilities`IteratorExhausted.

The main (if internal) utility is GeneralUtilities`PackageScope`PullIterator:

foo = GeneralUtilities`KeyValueIterator[<|a -> x, b -> y, c -> z|>];

GeneralUtilities`PackageScope`PullIterator@foo
GeneralUtilities`PackageScope`PullIterator@foo
GeneralUtilities`PackageScope`PullIterator@foo
GeneralUtilities`PackageScope`PullIterator@foo
(*
  a -> x
  b -> y
  c -> z
  IteratorExhausted
*)

One can see from inspection with ?... that one can do such things as Map, Scan, Fold, Read, etc., over iterators:

foo = GeneralUtilities`KeyValueIterator[<|a -> x, b -> y, c -> z|>];
Map[f, foo]
(*  {f[a -> x], f[b -> y], f[c -> z]}  *)

Normal converts them to a list:

foo = GeneralUtilities`KeyValueIterator[<|a -> x, b -> y, c -> z|>];
Normal[foo]
(*  {a -> x, b -> y, c -> z}  *)

Other functionality can be inspected with ?.

Answered by Michael E2 on January 31, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP