2014-11-17 4 views
1

Ruby에서 문자 배열로 분할 된 문자열을 취한 다음 배열을 반복하면서 색인 n에서 요소를 색인 n으로 교체하는 메서드를 작성하려고합니다. +1. 그런 다음이 메서드는 새 배열을 문자열에 조인하고 다른 배열로 밀어 넣습니다.배열의 인접한 요소 교환하기

string = "teh" 
some_method(string) 
    some ruby magic here 
    array << new_string 
end 

예상 출력 : 다음

은 내가 찾고있는 무슨의 예입니다

["eth", "the"] 

이 내가 학교를 위해 쓰고 맞춤법 검사기 프로그램입니다. 이 메서드는 출력 배열 요소가 사전에 있는지 확인하여 맞춤법이 틀린 단어의 문자를 스왑했는지 확인합니다. 그럴 경우, 올바른 단어 일 가능성이있는 단어를 반환합니다. 루비 나 기존 방법으로 그러한 메소드를 빌드하는 방법에 대한 기사 나 문서를 찾지 못했습니다. 난 잠시 동안이 방법을 만들지 못했지만 내 코드는 내가 필요한만큼 행동하지 않는다. 미리 감사드립니다! (즉, 필요하지 않는 것 때문에) 다음 새 배열에 합류 배열로 분할하지 않고

+1

변수 (또는 그 문제에 대한 배열 요소)의 교환은 임시 변수로 간단하게 수행됩니다. "하지만 내 코드가 내가 필요한만큼 행동하지 못해."- 테스트가 있습니까? 그들은 이것을 도울 수 있습니다. –

+0

당신은 당신이 원하는 것 중 아주 작은 예를 하나 제시했습니다. 루비에서 "마지막 글자를 떼어 놓고 문자열 앞에 붙이세요"라고 어떻게 표현 하시겠습니까? – tadman

+0

@tadman : 매우 특이한 오타가 될 것입니다. –

답변

1

:

def some_method(string) 
    swapped_strings = [] 
    (0...string.size-1).each do |i| 
    temp_string = string.dup 
    temp_string[i], temp_string[i+1] = temp_string[i+1], temp_string[i] 
    swapped_strings << temp_string 
    end 
    swapped_strings 
end 
1

@Sergio는 조언으로,이 병렬 할당을 사용하려면 :

def reverse_em(str) 
    (0...str.size-1).map do |i| 
    s = str.dup 
    s[i], s[i+1] = s[i+1], s[i] 
    s 
    end 
end 

candidates = reverse_em "alogrithm" 
    #=> ["laogrithm", "aolgrithm", "algorithm", "alorgithm", 
    # "alogirthm", "alogrtihm", "alogrihtm", "alogritmh"] 

dictionary_check(candidates) 
    #=> algorithm 
    # al·go·rithm 
    # noun \ˈal-gə-ˌri-thəm\ 
    # a set of steps that are followed in order to solve a 
    # mathematical problem or to complete a computer process 
관련 문제