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

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

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

Ruby是一门功能丰富的编程语言,它提供了许多内置的功能来处理数据。其中之一就是枚举器(Enumerator)类。在这个类里面,我们可以找到sort_by()函数,该函数可以被任何可枚举的对象调用,如数组、哈希表、以及各种集合等。

sort_by()函数接受一个块,该块接受每个元素,并返回一个用于比较的值。根据这些值,sort_by()会按顺序对元素进行排序。下面是一个基本示例:

words = %w(pizza beer chicken burger)
sorted_words = words.sort_by { |word| word.length }
puts sorted_words #=> ["beer", "pizza", "chicken", "burger"]

在这个示例中,sort_by()函数对words数组进行了排序,根据每个单词的长度(word.length)进行比较。这样就可以得到一个按长度排序的单词数组。

下面再来一个更复杂的示例。假设我们有一个由哈希表组成的数组,每个哈希表内部都有一个"name"字段和"age"字段,我们需要按照"age"字段排序:

people = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 21 },
  { name: "Charlie", age: 30 },
  { name: "David", age: 25 }
]

sorted_people = people.sort_by { |person| [person[:age], person[:name]] }
puts sorted_people.inspect
#=> [{:name=>"Bob", :age=>21}, {:name=>"Alice", :age=>25}, {:name=>"David", :age=>25}, {:name=>"Charlie", :age=>30}]

在这个示例中,sort_by()函数对people数组进行了排序,这次按照两个字段来排序:首先按照年龄进行排序,然后按照名字进行排序。这样就可以得到一个按年龄和名字排序的人物数组。

总之,sort_by()函数在Ruby编程中非常实用,它可以用来对任何可枚举的对象进行排序。无论是数组、哈希表还是集合,都可以使用sort_by()从中提取对比值,实现排序的功能。