변형을 계산하는 Ruby로 작성된 메서드가 필요합니다. 이미 Java로 작성했지만, Ruby를 처음 접했을 때 Ruby 구현에 대해 놓친 부분이 있습니다.Ruby 반복 버그 메서드가있는 변형
이 방법은 이렇게 suposed된다
방법 (1, "01") => [ "0", "1"]
방법 (2, "01") => [ "00" "01", "10", "11"] ... 아이디어를 얻을 수 있습니다.
참고 : ([ "0", 1 "] 2) 방법,하지만 그건 문제가되지이다
내 자바 IMPL : 루비 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;
}
그리고 그것은 잘 작동하고 그러나 내 루비 구현이다. 10 : : 나는 오류 메시지 test.rb가 계속이에서
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
'변화'에가 : 문자열 (형식 오류)로 무기 호를 변환 할 수 없습니다.
감사합니다. 잘 작동합니다. 나는 intentionaly 배열의 크기를 선언했다. 그래서 새로운 원소를 추가 할 때마다 크기를 늘리지 않기를 바란다. (자바에서는 크기를 선언 할 필요가 없다). Ruby에서이 작업을 수행 할 수있는 방법이 있습니까? –
루비는 배열 메모리를 청크로 재 할당하므로 확장 할 때마다 다시 할당 할 필요가 없습니다. 그러나'size' nils의 배열을 할당하려면'[nil] * size'가 그것을 할 것입니다. –
@ user245543, 나는 소스 (array.c)로 돌아갔습니다; 내 기억이 맞아. Ruby는 16 개 요소를 저장할 수있는 충분한 공간을 가진 배열을 생성 한 다음 필요에 따라 청크로 확장합니다 (잘못 입력하지 않으면 배열의 요소가 많을수록 더 많은 메모리가 추가됩니다). 배열을 할당하는 데 사용되는 시간은 거의 문제가되지 않습니다. –