📜  红宝石 |可枚举的 minmax_by()函数(1)

📅  最后修改于: 2023-12-03 15:41:11.715000             🧑  作者: Mango

红宝石 | 可枚举的 minmax_by() 函数

在 Ruby 中,有一个叫做 minmax_by() 的函数,它可以对一个可枚举对象进行遍历,返回其中最小和最大值所在的元素。这个函数在排序、最大最小值查找等场合非常有用。

语法
enum.minmax_by {|obj| block } → [min, max]

其中 enum 是一个可枚举的对象,比如数组、哈希表等等。block 是一个代码块,用于定义如何对元素进行比较。

返回值

minmax_by() 函数的返回值是一个包含两个元素的数组,分别是最小值和最大值所在的元素。这两个元素的顺序是按照它们在可枚举对象中出现的顺序决定的。

如果可枚举对象为空,minmax_by() 函数将返回 nil

示例

下面是一个示例,用 minmax_by() 函数找出一个数组中长度最短和最长的两个字符串:

words = ["apple", "banana", "cherry", "date", "elderberry"]

min, max = words.minmax_by {|word| word.length}

puts "Shortest word: #{min}, length #{min.length}"
puts "Longest word:  #{max}, length #{max.length}"

输出:

Shortest word: date, length 4
Longest word:  elderberry, length 10
使用技巧
  • 如果需要找的最小或最大值不是整个元素本身,而是它们的某个属性,可以使用类似 minmax_by {|obj| obj.prop } 的语法来进行比较。
  • 如果需要按照不同的顺序比较元素,可以拼接多个排序条件来达到目的。例如,minmax_by {|obj| [obj.prop1, obj.prop2] } 可以先按照 prop1 进行排序,再在相同 prop1 值的元素之间按照 prop2 进行排序。