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
- Un
Settraga los duplicados en silencio. - Un
Baglleva la cuenta:occurrencesOf:la lee. asSetsobre un Bag lista los elementos distintos.
Palabras clave y builtins usados aquí
new
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.
Paso 3 de 4 en Colecciones; paso 12 de 31 en Fundamentos del lenguaje.