Sommario: La domanda di base qui era, ho scoperto, se è possibile passare un blocco di codice a un array di Ruby che effettivamente ridurrà il contenuto di tale array in un altro array, non su un singolo valore (il modo in cui si applica inietta). La risposta breve è "no".Chunk a matrice di Ruby in base a strisce all'interno di esso
Sto accettando la risposta che dice questo. Grazie a Squeegy per una grande strategia di looping per ottenere strisce da un array.
La sfida: Per ridurre gli elementi di un array senza eseguire il looping in modo esplicito.
Ingresso: Tutti i numeri interi da -10 a 10 (tranne 0) ordinati in ordine casuale.
L'output desiderato: Un array che rappresenta strisce di numeri positivi o negativi. Ad esempio, a -3 rappresenta tre numeri negativi consecutivi. A 2 rappresenta due numeri positivi consecutivi.
Script di esempio:
original_array = (-10..10).to_a.sort{rand(3)-1}
original_array.reject!{|i| i == 0} # remove zero
streaks = (-1..1).to_a # this is a placeholder.
# The streaks array will contain the output.
# Your code goes here, hopefully without looping through the array
puts "Original Array:"
puts original_array.join(",")
puts "Streaks:"
puts streaks.join(",")
puts "Streaks Sum:"
puts streaks.inject{|sum,n| sum + n}
uscite Esempi:
Original Array:
3,-4,-6,1,-10,-5,7,-8,9,-3,-7,8,10,4,2,5,-2,6,-1,-9
Streaks:
1,-2,1,-2,1,-1,1,-2,5,-1,1,-2
Streaks Sum:
0
Original Array:
-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10
Streaks:
-10,10
Streaks Sum:
0
nota un paio di cose:
- L'array striature ha alternato valori positivi e negativi.
- La somma della matrice di elementi streaks è sempre 0 (come la somma dell'originale).
- La somma dei valori assoluti della matrice striscia è sempre 20.
Speranza che è chiaro!
Modifica: Mi rendo conto che tali costrutti come rifiutano! sono in realtà in loop attraverso la matrice in background. Non escludo il looping perché sono una persona cattiva. Sto solo cercando di conoscere la lingua. Se è necessaria un'iterazione esplicita, va bene.
Perché non ripetere l'array? Come ti aspetti di elaborare il contenuto di un array senza doverlo scorrere. Anche se si utilizza un metodo per farlo, continuerà a eseguire il looping interno della matrice. –
ti rendi conto che ogni metodo che hai chiamato nell'esempio di codice stava infatti eseguendo il ciclo attraverso l'array ... – kgrad
Sì, esattamente, non c'è modo di ridurre un array senza doverlo scorrere ... non ci sarebbe modo di accedere il contenuto. – cdmckay