Menu
CoddyTech

sort_by, min_by, max_by

Fait partie de la section Logique et flux du Journey Ruby de Coddy. Leçon 26 sur 56.

Vous connaissez déjà sort, min et max. Les versions _by vous permettent de contrôler ce qu'il faut comparer, ce qui est idéal pour trier des données structurées.

sort_by prend un bloc ; le bloc renvoie la valeur à comparer pour chaque élément :

words = ["banana", "hi", "hello"]
by_length = words.sort_by { |w| w.length }
puts by_length.inspect   # ["hi", "hello", "banana"]

Pour un ordre décroissant, inversez la clé de comparaison, -w.length pour les nombres, ou appelez reverse sur le résultat.

min_by et max_by retournent l'élément unique ayant la valeur la plus petite / la plus grande du bloc :

people = [
  { name: "Ada",   age: 36 },
  { name: "Bob",   age: 22 },
  { name: "Cara",  age: 41 }
]

youngest = people.min_by { |p| p[:age] }
oldest   = people.max_by { |p| p[:age] }
puts youngest[:name]   # Bob
puts oldest[:name]     # Cara

La syntaxe abrégée fonctionne également : words.sort_by(&:length).

challenge icon

Défi

Moyen

Le tableau products est fourni, chaque élément étant un hash avec :name, :price, et :quantity. La valeur du stock de chaque produit est price * quantity.

Affichez trois lignes :

  1. Les noms triés par valeur de stock décroissante, joints par , (utilisez sort_by sur la valeur dérivée)
  2. Le nom du produit ayant la quantité la plus élevée parmi les articles dont le prix est inférieur à 5 (utilisez max_by sur une liste filtrée)
  3. Le nom du produit le moins cher dont la quantité est d'au moins 10 (utilisez min_by sur une liste filtrée)

Pour le tableau par défaut, la sortie est :

cheese, milk, bread, apple
bread
bread

Essayez vous-même

products = [
  { name: "milk",   price: 3, quantity:  8 },
  { name: "apple",  price: 1, quantity:  4 },
  { name: "cheese", price: 5, quantity:  6 },
  { name: "bread",  price: 2, quantity: 12 }
]

# TODO: trier par valeur de stock décroissante ; max par quantité (prix < 5) ; min par prix (quantité >= 10)
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux

Entraînez-vous par vous-même : Compilateur Ruby en ligne