Track
/
Bash
Bash
/
Esercizi
/
Operazioni su array
Operazioni su array

Operazioni su array

Medio

Istruzioni

Implementa le operazioni di base sugli array.

Nei linguaggi funzionali, le operazioni sugli array come length, map e reduce sono molto comuni. Implementa una serie di operazioni di base sugli array, senza usare le funzioni esistenti.

Il numero preciso e i nomi delle operazioni da implementare dipenderà dal track, per evitare conflitti con i nomi già esistenti, ma le operazioni generali che implementerai includono:

  • append (dati due array, aggiungi tutti gli elementi del secondo array alla fine del primo array);
  • concatenate (data una serie di array, combina tutti gli elementi di tutti gli array in un unico array appiattito);
  • filter (dati un predicato e un array, restituisci l'array di tutti gli elementi per cui predicate(item) è True);
  • length (dato un array, restituisci il numero totale di elementi che contiene);
  • map (date una funzione e un array, restituisci l'array dei risultati dell'applicazione di function(item) a tutti gli elementi);
  • foldl (date una funzione, un array e un accumulatore iniziale, piega (riduci) ogni elemento nell'accumulatore da sinistra);
  • foldr (date una funzione, un array e un accumulatore iniziale, piega (riduci) ogni elemento nell'accumulatore da destra);
  • reverse (dato un array, restituisci un array con tutti gli elementi originali, ma in ordine inverso).

Nota: l'ordine in cui gli argomenti vengono passati alle funzioni fold (foldl, foldr) è significativo.

Libreria di funzioni

Questo è il primo esercizio in cui la soluzione che scriviamo non è uno script «main». Stiamo scrivendo una libreria che verrà caricata con «source» in altri script, che richiameranno le nostre funzioni.

I nameref di Bash

Questo esercizio richiede l'uso di variabili nameref. Per questo serve una versione di bash almeno 4.0. Se usi il bash predefinito su MacOS, dovrai installare un'altra versione: vedi Installare Bash

I nameref sono un modo per passare una variabile a una funzione per riferimento. In questo modo, la variabile può essere modificata all'interno della funzione e il valore aggiornato è disponibile nello scope chiamante. Ecco un esempio:

prependElements() {
    local -n __array=$1
    shift
    __array=( "$@" "${__array[@]}" )
}

my_array=( a b c )
echo "before: ${my_array[*]}"    # => before: a b c

prependElements my_array d e f
echo "after: ${my_array[*]}"     # => after: d e f a b c
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Bash Exercism

Vuoi iniziare Operazioni su array?

Iscriviti a Exercism per imparare e padroneggiare Bash con 97 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Operazioni su array!

Goditi un'introduzione pratica alla ricorsione, esplora le alternative imperative e funzionali a Operazioni su array e approfondisci la ricorsione in coda e le funzioni di accumulo.