我正在尝试用他们的最后一个字符对一系列单词进行排序。
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"
。
答案 0 :(得分:6)
def array_sort_by_last_letter_of_word(array)
array.sort_by { |word| word[-1] }
end
Rails版本(使用String#last
):
def array_sort_by_last_letter_of_word(array)
array.sort_by(&:last)
end
答案 1 :(得分:1)
安德烈的回答绝对是这样做的方法。但要了解代码出了什么问题:
list = array[-1,1]
此语法用于获取数组的子数组。模式为array[start, length]
以从索引start
开始,长度为length
。所以你要求一个从-1
开始的数组(这意味着最后一个索引)的长度为1
,即只是数组的最后一个元素。所以last = ['maker']
。这就是你的sort方法只是返回那个元素的原因。
你想得到里面的最后一个字符排序块,这就决定了字符串的比较方式
array.sort { |a,b| a[-1] <=> b[-1] }
另请注意,a
需要保留b
,否则数组将反向排序。