【问题标题】:Sort an array of words by the last letter按最后一个字母对单词数组进行排序
【发布时间】:2016-11-13 12:13:08
【问题描述】:

我正在尝试按最后一个字符对一组单词进行排序。

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"

【问题讨论】:

  • 请务必选择并接受最能解决您的问题的答案。通过这种方式,您可以让社区知道您的问题已经解决,并且您也会奖励那些花时间帮助您的人的努力。

标签: arrays ruby sorting


【解决方案1】:
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

【讨论】:

  • 干杯安德烈。谢谢你。
  • @AltBrian 没有问题!
  • AltBrian,如果你曾经在 Rails 中这样做过,你可以使用word.last:)。 @Andrey 你认为我们会在纯 Ruby 中得到 String#first,String#last 吗?
  • @sagarpandya82 不能说,但看不出有什么理由不去那里 :)
  • 虽然问题没有要求,并且取决于如何使用结果,array.sort_by { |word| [word[-1], word] } 可能更有用,因为它按字母顺序排列具有相同最后一个字母的单词。
【解决方案2】:

安德烈的回答绝对是做到这一点的方法。但是要了解您的代码出了什么问题:

list = array[-1,1]

此语法用于获取数组的子数组。模式为array[start, length] 以获取从索引start 开始、长度为length 的数组。因此,您要求一个从-1(表示最后一个索引)开始的数组,长度为1,即数组的最后一个元素。所以last = ['maker']。这就是为什么您的排序方法只是返回该元素。

您想获取排序块中的最后一个字符,它决定了字符串的比较方式

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

还要注意a需要在b的左边,否则数组是倒序排列的。

【讨论】:

  • 另请注意,虽然sortsort_by 更通用,但在大多数情况下sort_by 就足够了,而且比sort 快得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2021-05-21
相关资源
最近更新 更多