2014-11-17 5 views
1

Я пытаюсь построить метод в Ruby, который возьмет строку, которая была разделена на массив букв, а затем перебирает массив, обменивая элемент с индексом n на индекс n +1. Затем метод присоединяет новый массив в строку и переносит его в другой массив.Swap смежные элементы в массиве

Вот пример того, что я ищу, чтобы сделать:

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

Ожидаемый результат:

["eth", "the"] 

Это для проверки орфографии программа, которую я пишу для школы. Метод проверяет, заменяются ли буквы слова с орфографической ошибкой, проверяя, находятся ли элементы выходного массива в словаре. Если они есть, он вернет слово, и это, скорее всего, правильное слово. Мне не удавалось найти статьи или документацию о том, как создать такой метод в рубине или существующий метод для этого. Я уже сейчас занимаюсь этим методом, но мой код не ведет ничего похожего на то, что мне нужно. Заранее спасибо!

+1

Перестановка переменных (или элементов массива в этом случае) выполняется тривиально с помощью переменной temp. «но мой код не ведет ничего похожего на то, что мне нужно» - у вас есть тесты? Они могут помочь в этом. –

+0

Вы дали один очень маленький пример того, что вы хотите. Как бы вы выразили «снять последнюю букву и поставить перед строкой» в Ruby? – 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 
Смежные вопросы