题
我需要用Ruby编写的方法,该方法计算变化。我已经用Java写了它,但是作为Ruby的新手,Ruby的实现只有一些我缺少的东西。
该方法是为此做到的:
方法(1,“ 01”)=> [“ 0”,“ 1”
方法(2,“ 01”)=> [“ 00”,“ 01”,“ 10”,“ 11”] ...所以您明白了。
注意:在Ruby Impl中,我给出这样的瘫痪:方法(2,[“ 0”,1“”),但这不是问题。
我的爪哇式:
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;
}
而且工作正常。但这是我的红宝石实施:
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
在此中,我一直在获得错误消息测试。RB:10:in``variation'':无法将零转换为字符串(TypeError)。
解决方案
在红宝石中,阵列会根据需要自动生长。因此,从:
array = Array.new(arrayOfString.size**strength)
至
array = []
要在字符串中枚举每个字符,而不是
for i in arrayOfString do
做这个:
arrayOfString.each_char do |i|
最终结果:
#!/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"]
每个_char在ruby> = 1.8.7中,或者您可以从 Backports宝石.
不隶属于 StackOverflow