Rubino Varietà con metodo buggy ripetizione
-
08-10-2019 - |
Domanda
Ho bisogno di un metodo scritto in Ruby, che calcola Variazioni. Ho già scritto in Java, ma come io sono nuovo a Ruby, c'è solo qualcosa che mi manca in merito all'attuazione Ruby.
Il metodo è dovuto inviarci per fare questo:
Metodo (1, "01") => [ "0", "1"]
Metodo (2, "01") => [ "00", "01", "10", "11"] ... così si ottiene l'idea.
Nota: nel impl Ruby, io do paralms come questo: il metodo (2, [ "0", 1" ]), ma non è un problema
.Il mio Java impl:
public static List<String> Variations(int strength, String usableChars) {
List<String> list =
new ArrayList<String>((int) Math.pow(usableChars.length(), strength));
if (strength == 0) {
list.add("");
} else {
List<String> l = Variations(strength - 1, usableChars);
for (char c : usableChars.toCharArray()) {
for (String s : l) {
list.add(c + s);
}
}
}
return list;
}
E va bene lavoro. Ma questa è la mia implementazione di Ruby:
def Variation (strength, arrayOfString)
array = Array.new(arrayOfString.size**strength)
if strength == 0
array << ""
else
a = Variation(strength-1, arrayOfString)
for i in arrayOfString do
for j in a do
array << (i + j)
end
end
end
return array
end
In questo io continuo a ricevere il messaggio di errore test.rb: 10: in `Variation ':. Non può convertire nullo in String (TypeError)
Soluzione
In Ruby, crescere automaticamente secondo necessità gli array. Quindi, cambiare la vostra inizializzazione matrice da:
array = Array.new(arrayOfString.size**strength)
a
array = []
Per enumerare su ogni carattere di una stringa, anziché
for i in arrayOfString do
fare questo:
arrayOfString.each_char do |i|
Il risultato finale:
#!/usr/bin/ruby1.8
def Variation (strength, arrayOfString)
array = []
if strength == 0
array << ""
else
a = Variation(strength - 1, arrayOfString)
arrayOfString.each_char do |i|
for j in a do
array << (i + j)
end
end
end
return array
end
p Variation(2, '01') # => ["00", "01", "10", "11"]
each_char è in Ruby> = 1.8.7, oppure si può ottenere dal backport gemma .