バリエーションを計算するRubyで書かれたメソッドが必要です。私は既にJavaで書いていますが、私がRubyを初めて使っているときには、Rubyの実装について私が見逃していることがあります。Rubyバグを繰り返すバリエーション
方法は、これを行うためにsuposedれる:
方法(1、 "01")=> [ "0"、 "1"]
方法(2、 "01")=> [ "00"、 "01"、 "10"、 "11"] ...あなたは考えを得る。
ノート:(、[ "0"、1" ] 2)の方法が、それは問題ではないのです
私のJavaのimpl:RubyのIMPLに、私はこのようなparalmsを与える。
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;
}
そして、それは正常に動作しています。しかし、これは私の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
を私はエラーメッセージtest.rbを得続ける:10: `変化"に:文字列(TypeError例外)にnilを変換することはできません。
ありがとうございます。私は意図的に配列のサイズを宣言しました。新しい要素を追加するたびにサイズを増やさないようにしました(Javaではサイズを宣言する必要はありません)。 Rubyでこれを行うにはいくつかの方法がありますか? –
私が思い出したように、Rubyは配列メモリをチャンクに再割り当てするので、展開するたびに再割り当てする必要はありません。しかし、 'size' nilsの配列を割り当てるには、' [nil] * size'がそれを行います。 –
@ user245543、私はソース(array.c)に戻りました。私の記憶は正しい。 Rubyは、16個の要素のための十分な空き領域を持つ配列を作成し、必要に応じてそれを塊として作成します(誤っていなければ、配列内の要素が増えるほど、メモリが追加されます)。配列の割り当てに使用される時間はほとんど問題ではありません。 –