轻松排序!sort 的延伸用法,Ruby 30 天刷题修行篇第十一话

嗨,我是 A Fei,大家周末过得如何?五倍振兴券想好怎麽花了吗?如果没有,可以给我(被揍),啊不是,也可以考虑捐给弱势团体唷,这也是我最近才知道的,原来振兴券不只可以消费,也可以捐助。

闲聊完後,马上让我们看看今天的题目:
(题目来源:Codewars


Write a function that takes an array of strings as an argument and returns a sorted array containing the same strings, ordered from shortest to longest.

For example, if this array were passed as an argument:

["Telescopes", "Glasses", "Eyes", "Monocles"]

Your function would return the following array:

["Eyes", "Glasses", "Monocles", "Telescopes"]

All of the strings in the array passed to your function will be different lengths, so you will not have to decide how to order multiple strings of the same length.


题目要我们把一阵列中的字串(元素),依照长度依序排好,我马上想到 sort 方法,这边可以介绍一下 sort 的进阶用法,一般 sort 是昇序排列,那如果要降序呢?你可以在 sort 後面接上 block,写法是 array.sort {|a, b| b <=> a },<=> 运算子将在 a 小於 b 时回传负数,当 a 大於 b 时回传正数,当 a 和 b 相等时回传 0,藉此两两比较、排序阵列中的元素。让我们直接试试:

a = ["a", "b", "c", "d", "e"]
a.sort {|a, b| b <=> a } 
  # => ["e", "d", "c", "b", "a"]

同样的道理,反过来写的话就是昇序,以下为我的解答:

def sort_by_length(arr)
  arr.sort {|a, b| a.length <=> b.length }
end

对比评分最高的答案:

def sort_by_length(arr)
  arr.sort_by(&:length)
end

它更加准确地用了 sort_by 方法,sort_by 後面可以接上要排序的条件,例如官网的例子:

%w{apple pear fig}.sort_by { |word| word.length }
  #=> ["fig", "pear", "apple"]

而 &: 在上一章提过,这算是一种缩写法。

好啦,今天的解题纪录就到这,大家掰掰~


<<:  创建App-任务中心界面

>>:  IT 铁人赛 k8s 入门30天 -- day12 Persisting Data in K8s with Volumes

第一个 Spring boot 应用程序开发

第一个 Spring boot API 开发范例。使用的元件有以下,开发使用 vscode 建立专案...

数位转型

在疫情的情况之下,所有的节奏都被打乱了,在全球都在这样的情况之下,大家都在求新求变,不论是办公还是教...

Day 18 [Python ML、Pandas] 重新命名和整合

import pandas as pd reviews = pd.read_csv("./...

使用 Line Messaging Api 取得 User Profile

今天我们要帮验证码小帮手加上取得 User Profile 的功能,这样能更进一步客制化讯息或纪录。...

【Day 30】最後的总结

废言 第一次报名铁人赛,觉得还有很多没有周全考虑的部分。 明年可能还会再报名分享什麽东西。 不过当初...