我想按單詞的最後一個字符對數組排序。用最後一個字母對單詞數組排序
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
)
我想按單詞的最後一個字符對數組排序。用最後一個字母對單詞數組排序
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
)
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
乾杯安德烈。感謝那。 – AltBrian
@AltBrian沒有probs! –
AltBrian,如果你曾經在Rails中這樣做過,你可以使用'word.last' :)。 @Andrey你認爲我們會在普通的Ruby中獲得'String#first','String#last'嗎? –
安德烈的答案肯定是做到這一點的方式。但要了解您的代碼出了什麼問題:
list = array[-1,1]
此語法用於獲取數組的子陣列。該模式爲array[start, length]
以獲得從索引start
開始的長度爲length
的數組。所以你需要一個從-1
(這意味着最後一個索引)開始的長度爲1
的數組,即數組的最後一個元素。所以last = ['maker']
。這就是爲什麼你的排序方法只是返回該元素。
你想要得到的最後一個字符內排序塊,這是確定如何比較字符串
array.sort { |a,b| a[-1] <=> b[-1] }
還要注意的是被留下的b
a
需求,否則數組的排序相反。
另外請注意,雖然'sort'比'sort_by'多用途,但在大多數情況下'sort_by'就足夠了,而且比sort更快。 – Amadan
請確保選擇並接受最佳解決問題的答案。通過這種方式,您可以讓社區知道您的問題已經解決,同時您也會獎勵那些花時間幫助您的人。 –