2016-11-13 59 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

相关问题