Kurzusok
/
Ruby
Ruby
/
Feladatok
/
Butikleltár
Butikleltár

Butikleltár

Tanulófeladat

Bevezetés

További felsoroló metódusok

A Bird Count feladatban megismerkedtél a count, any?, select, all? és map felsoroló metódusokkal. Íme ezek összefoglalója, néhány extrával kiegészítve:

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-ek felsorolása

A Hash objektumok felsorolása pontosan ugyanúgy működik, mint az Array objektumoké, azzal a különbséggel, hogy a blokk két argumentumot kap: a kulcsot és az értéket:

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

Ha csak az egyik értékre van szükséged, a speciális _ szimbólummal jelezheted, hogy az egyik értékre nincs szükség. Ez egyrészt segít abban, hogy a fejlesztő számára átláthatóbb legyen a kód, másrészt teljesítményoptimalizálás is.

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

Egymásba ágyazott felsorolások

Egymásba ágyazott blokkokban is felsorolhatsz, és a metódusokat is összefűzheted láncszerűen. Például ha van egy állatokat tartalmazó, hash-ekből álló tömbünk, és ki szeretnénk gyűjteni a rövid nevű állatokat, valami ilyesmit tehetünk:

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"]

Utasítások

Egy online divatbutikot vezetsz. Közeleg a nagy éves akció, ezért szeretnél néhány funkciót készíteni, amelyek segítenek számba venni a készletedet, hogy biztosan felkészülten vágj neki.

A készlet egyetlen elemét egy hash reprezentálja, a teljes készlet pedig ezeknek a hash-eknek a tömbje.

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

1. Add vissza a termékek neveinek listáját

Valósítsd meg a BoutiqueInventory.item_names metódust, amely ábécésorrendben adja vissza a termékek neveinek listáját.

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. Add vissza az olcsó termékeket

Valósítsd meg a BoutiqueInventory.cheap metódust, amely visszaadja azokat a termékeket, amelyek kevesebbe kerülnek, mint 30 dollár.

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. Add vissza az elfogyott termékeket

Valósítsd meg a BoutiqueInventory.out_of_stock metódust, amely visszaadja azokat a termékeket, amelyeknek nincs készletük (azaz a quantity_by_size üres).

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. Add vissza egyetlen termék készletét

Valósítsd meg a BoutiqueInventory.stock_for_item(name) metódust, amely a neve alapján adja vissza egy termék készletét:

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. Add vissza a teljes készletet

Valósítsd meg a BoutiqueInventory.total_stock metódust, amely kiszámítja a raktáradban lévő termékek teljes mennyiségét:

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
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Ruby Exercism

Készen állsz elkezdeni a(z) Butikleltár feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ruby nyelvet 21 fogalom121 feladat segítségével, valódi emberi mentorálással, mindez ingyen.