1.16. Generowanie następnika łańcucha

Problem

Należy wykonać iterację po ciągu łańcuchów zwiększających się alfabetycznie — w sposób podobny do iterowania po ciągu kolejnych liczb.

Rozwiązanie

Jeśli znany jest początkowy i końcowy łańcuch z zakresu objętego iteracją, można do tego zakresu (reprezentowanego jako obiekt Range) zastosować metodę Range#each:

('aa'..'ag').each { |x| puts x }
# aa
# ab
# ac
# ad
# ae
# af
# ag

Metodą generującą następnik danego łańcucha jest String#succ. Jeśli nie jest znany łańcuch, na którym należy skończyć iterowanie, można na bazie tej metody zdefiniować iterację nieskończoną, którą przerwie się w momencie spełnienia określonego warunku:

def endless_string_succession(start) while true yield start start ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.