2016-11-13 27 views
3

我想按單詞的最後一個字符對數組排序。用最後一個字母對單詞數組排序

def array_sort_by_last_letter_of_word(array) 
    list = array[-1,1] 
    list.sort { |a,b| b <=> a } 
end 

puts array_sort_by_last_letter_of_word ['sky', 'puma', 'maker'] 

我得到的輸出只是"maker"。 (使用String#last

+0

請確保選擇並接受最佳解決問題的答案。通過這種方式,您可以讓社區知道您的問題已經解決,同時您也會獎勵那些花時間幫助您的人。 –

回答

6
def array_sort_by_last_letter_of_word(array) 
    array.sort_by { |word| word[-1] } 
end 

Rails的版本:

def array_sort_by_last_letter_of_word(array) 
    array.sort_by(&:last) 
end 
+0

乾杯安德烈。感謝那。 – AltBrian

+0

@AltBrian沒有probs! –

+0

AltBrian,如果你曾經在Rails中這樣做過,你可以使用'word.last' :)。 @Andrey你認爲我們會在普通的Ruby中獲得'String#first','String#last'嗎? –

1

安德烈的答案肯定是做到這一點的方式。但要了解您的代碼出了什麼問題:

list = array[-1,1] 

此語法用於獲取數組的子陣列。該模式爲array[start, length]以獲得從索引start開始的長度爲length的數組。所以你需要一個從-1(這意味着最後一個索引)開始的長度爲1的數組,即數組的最後一個元素。所以last = ['maker']。這就是爲什麼你的排序方法只是返回該元素。

你想要得到的最後一個字符排序塊,這是確定如何比較字符串

array.sort { |a,b| a[-1] <=> b[-1] } 

還要注意的是被留下的ba需求,否則數組的排序相反。

+1

另外請注意,雖然'sort'比'sort_by'多用途,但在大多數情況下'sort_by'就足夠了,而且比sort更快。 – Amadan

相關問題