typestar

Set y Bag en Smalltalk

Cada elemento una vez, o contado cada vez.

"A Set holds each element once; a Bag counts the repeats."
| customers tally |
customers := Set new.
customers add: 'Alba'; add: 'Bram'; add: 'Alba'.
Transcript show: customers size printString, ' distinct customers'; cr.

tally := Bag new.
tally add: 'broadside'; add: 'chapbook';
    add: 'broadside'; add: 'broadside'.
Transcript show: 'Broadsides ordered: ',
    (tally occurrencesOf: 'broadside') printString; cr.

tally asSet do: [:job |
    Transcript show: job, ' x',
        (tally occurrencesOf: job) printString; cr].

Cómo funciona

  1. Un Set traga los duplicados en silencio.
  2. Un Bag lleva la cuenta: occurrencesOf: la lee.
  3. asSet sobre un Bag lista los elementos distintos.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
15
Caracteres a escribir
508
Tokens
83
Ritmo de tres estrellas
55 tpm

Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 91 segundos.

Escribe este fragmento

Paso 3 de 4 en Colecciones; paso 12 de 31 en Fundamentos del lenguaje.

← Anterior Siguiente →