按最后一个字母对单词数组进行排序

时间:2016-11-13 12:13:08

标签: arrays ruby sorting

我正在尝试用他们的最后一个字符对一系列单词进行排序。

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"

2 个答案:

答案 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,否则数组将反向排序。