Διαδρομές
/
Ruby
Ruby
/
Ασκήσεις
/
Απογραφή μπουτίκ
Απογραφή μπουτίκ

Απογραφή μπουτίκ

Άσκηση εκμάθησης

Εισαγωγή

Περισσότερες μέθοδοι απαρίθμησης

Στο Bird Count γνώρισες τις μεθόδους απαρίθμησης count, any?, select, all? και map. Ας τα ανακεφαλαιώσουμε, προσθέτοντας και μερικά επιπλέον:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.count  { |number| number == 1 }   #=> 2
fibonacci.any?   { |number| number > 20 }   #=> false
fibonacci.none?  { |number| number > 20 }   #=> true
fibonacci.select { |number| number.odd? }   #=> [1, 1, 3, 5, 13]
fibonacci.all?   { |number| number < 20 }   #=> true
fibonacci.map    { |number| number * 2  }   #=> [0, 2, 2, 4, 6, 10, 16, 26]
fibonacci.select { |number| number >= 5 }   #=> [5, 8, 13]
fibonacci.find   { |number| number >= 6 }   #=> 8

# Some methods work with or without a block
fibonacci.sum  #=> 33
fibonacci.sum { |number| number * number }  #=> 273

# There are also methods to help with nested arrays:
animals = [ ['cat', 'bob'], ['horse', 'caris'], ['mouse', 'arya'] ]
animals.flatten  #=> ["cat", "bob", "horse", "caris", "mouse", "arya"]

Απαρίθμηση αντικειμένων Hash

Η απαρίθμηση αντικειμένων Hash είναι ακριβώς ίδια με την απαρίθμηση αντικειμένων Array, με τη διαφορά ότι το μπλοκ δέχεται δύο ορίσματα: το κλειδί και την τιμή:

pet_names = {cat: "bob", horse: "caris", mouse: "arya"}
pet_names.each { |animal, name| ... }

Αν χρειάζεσαι μόνο μία από τις τιμές, μπορείς να χρησιμοποιήσεις το ειδικό σύμβολο _ για να δηλώσεις ότι η μία τιμή δεν χρειάζεται. Αυτό βοηθά τόσο στη σαφήνεια για τον προγραμματιστή όσο και στην απόδοση.

pet_names = {cat: "bob", horse: "caris", mouse: "arya"}
pet_names.map { |_, name| name }  #=> ["bob", "caris", "arya"]

Εμφωλευμένες απαριθμήσεις

Μπορείς επίσης να απαριθμήσεις μέσα σε εμφωλευμένα μπλοκ και να ενώσεις μεθόδους σε αλυσίδα. Για παράδειγμα, αν έχουμε έναν πίνακα από αντικείμενα Hash με ζώα και θέλουμε να εξαγάγουμε τα ζώα με κοντά ονόματα, θα μπορούσαμε να κάνουμε κάτι σαν αυτό:

pets = [
  { animal: "cats", names: ["bob", "fred", "sandra"] },
  { animal: "horses", names: ["caris", "black beard", "speedy"] },
  { animal: "mice", names: ["arya", "jerry"] }
]

pets.map { |pet|
  pet[:names].select { |name| name.length <= 5 }
}.flatten.sort
#=> ["arya", "bob", "caris", "fred", "jerry"]

Οδηγίες

Διαχειρίζεσαι ένα διαδικτυακό κατάστημα μόδας. Η μεγάλη ετήσια έκπτωση πλησιάζει, οπότε θέλεις να φτιάξεις κάποιες λειτουργίες που θα σε βοηθήσουν να κάνεις απογραφή του αποθέματός σου και να βεβαιωθείς ότι είσαι έτοιμος.

Κάθε μεμονωμένο είδος του αποθέματος αναπαρίσταται από ένα hash, και ολόκληρο το απόθεμα είναι ένας πίνακας από αυτά τα hash.

[
  {
    name: "White Shirt",
    price: 40,
    quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}
  },
  { ... }
]

1. Επίστρεψε μια λίστα με τα ονόματα των ειδών

Υλοποίησε τη μέθοδο BoutiqueInventory.item_names, η οποία πρέπει να επιστρέφει μια λίστα με τα ονόματα των ειδών σε αλφαβητική σειρά.

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).item_names

#=> ["Bamboo Socks Cats", "Black Short Skirt", "Maxi Brown Dress", "Red Short Skirt"]

2. Επίστρεψε τα είδη που είναι φθηνά

Υλοποίησε τη μέθοδο BoutiqueInventory.cheap που πρέπει να επιστρέφει όποια είδη κοστίζουν λιγότερο από $30.

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).cheap

# => [
#      {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
#      {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
#    ]

3. Επίστρεψε τα είδη που έχουν εξαντληθεί

Υλοποίησε τη μέθοδο BoutiqueInventory.out_of_stock που πρέπει να επιστρέφει όποια είδη δεν έχουν απόθεμα (όπου το quantity_by_size είναι κενό).

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).out_of_stock

#=> [{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}}]

4. Επίστρεψε το απόθεμα ενός μεμονωμένου είδους

Υλοποίησε τη μέθοδο BoutiqueInventory.stock_for_item(name) για να επιστρέφει το απόθεμα ενός είδους με βάση το όνομά του:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).stock_for_item("Black Short Skirt")

#=> {s: 1, xl: 4}

5. Επίστρεψε το συνολικό απόθεμα

Υλοποίησε τη μέθοδο BoutiqueInventory.total_stock για να υπολογίσεις το συνολικό πλήθος των ειδών στην αποθήκη σου:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).total_stock

#=> 36
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Απογραφή μπουτίκ;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.