Em português iterador, é um objeto que permite a um programador examinar uma coleção ou container. Vários tipos de iteradores são frequentemente fornecidos através de uma interface de container. Apesar da interface e semântica de um determinado iterador serem fixas, iteradores são frequentemente implementados em termos de estruturas subjacentes a uma implementação de container e são muitas vezes ligados intimamente ao container para permitir a semântica operacional do iterador.
Observe que um iterador percorre e também dá acesso aos elementos de dados em um container, mas não realiza iteração (isto é, não sem alguma liberdade significativa tomada com este conceito ou com uso trivial da terminologia). Um iterador tem um comportamento semelhante a um cursor de banco de dados. Iteradores datam da linguagem de programação CLU de 1974.
Collection
É uma coleção, às vezes chamada de um recipiente (container), é simplesmente um objeto que agrupa vários elementos em uma única unidade. Coleções são usadas para armazenar, recuperar, manipular e comunicar dados agregados, ou seja uma coleção é um objeto que contém outros objetos, existem outras coleções com diferentes capacidades.
Historicamente, o quadro de coleções têm sido bastante complexo, o que lhes deu uma reputação de ter uma grande curva de aprendizagem. Os exemplos mais conhecidos de frameworks de coleções são o C ++ Standard Template Library (STL). A nomenclatura das APIs e suas sintaxes podem mudar de uma linguagem de programação para outra.
Array e Hash
O Ruby possui dois tipos de containers, eles pertencem as classes Array e Hash. Os Arrays são ordenados, coleções indexadas por números inteiros de qualquer objeto, um Hash é uma coleção como um dicionário de chaves únicas e seus respectivos valores.
Array: http://www.ruby-doc.org/core-2.2.0/Array.html
Hash: http://www.ruby-doc.org/core-2.0/Hash.html
Exemplo:
Neste exemplo criamos uma classe para representar um item musical que contem determinadas informações de uma musica. Utilizamos um container para armazenar as musicas representando um álbum e utilizamos o iterador para navegar e imprimir o conteúdo do container.
Ruby
#!/usr/bin/env ruby # Desenvolvimento Aberto # Containers.rb # Define classe class Album # Métodos attr_accessor :id, :musica, :duracao # Construtor def initialize(id, musica, duracao) @id = id @musica = musica @duracao = duracao end end # Cria Array (Lista) afd = [ Album.new(1, "Welcome to the Jungle ", "4:34"), Album.new(2,"It's So Easy","3:23"), Album.new(3,"Nightrain","4:28"), Album.new(4,"Out Ta Get Me","4:24"), Album.new(5,"Mr. Brownstone","3:49"), Album.new(6,"Paradise City","6:46"), Album.new(7,"My Michelle","3:40"), Album.new(8,"Think About You","3:52"), Album.new(9,"Sweet Child O' Mine","3:21"), Album.new(10,"You're Crazy","3:17"), Album.new(12,"Anything Goes","3:26"), Album.new(12,"Rocket Queen","6:13")] # itera lista puts "Album - Appetite for Destruction - GNR\n\n" # Itera lista afd.each do |musicas| # Recupera objetos objeto = musicas # Imprime objeto puts String(objeto.id).ljust(5) + objeto.musica.ljust(40) + objeto.duracao.rjust(5) end