iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
1

今天要來聊聊資料結構的部分,關於資料要以何種方式存取 ( 選擇 Hash 或 Array )
推薦讀者自己也想一個例子來寫,店家、菜單、學校...等越生活化越容易想像,我自己是透過這樣的方式才真的明白這兩種資料型態的!

例子:小華開了 N 間的連鎖餐飲店,需要店名、電話、商品項目、商品價格、商品數量
( 以下程式註解的原因是執行這個檔案時,會印出太多資料,所以這文章就只開部分欄位 )

store =[
  {
    store_name:'台北店',
    phone:'02-1234-5678',
    # adress:'台北市中正區OO路0號',
    # manager:'john',
    product_all:{
      bread:{
        price:15,
        quantity:8,
        # manufacturer:'aaa company',
        # cost:7
      },
      tea:{
        price:20,
        quantity:19,
        # manufacturer:'bbb company',
        # cost:10
      },
      pizza:{
        price:50,
        quantity:10,
        # manufacturer:'ccc company',
        # cost:30
      } 
    }
  },
  {
    store_name:'台中店',
    phone:'04-987-6543',
    # adress:'台中市清水區OO路0號',
    # manager:'ann',
    product_all:{
      noodle:{
        price:80,
        quantity:50,
        # manufacturer:'ddd company',
        # cost:37'
      },
      soup:{
        price:20,
        quantity:12,
        # manufacturer:'eee company',
        # cost:9
      },
      pizza:{
        price:50,
        quantity:1,
        # manufacturer:'ccc company',
        # cost:30
      }
    } 
  }
]

step 1:
先取出小華所有的店及其資訊:

puts store

執行結果:
{:store_name=>"台北店", :phone=>"02-1234-5678", :product_all=>{:bread=>{:price=>15, :quantity=>8}, :tea=>{:price=>20, :quantity=>19}, :pizza=>{:price=>50, :quantity=>10}}}
{:store_name=>"台中店", :phone=>"04-987-6543", :product_all=>{:noodle=>{:price=>80, :quantity=>50}, :soup=>{:price=>20, :quantity=>12}, :pizza=>{:price=>50, :quantity=>1}}}


step 2:
因為小華有N間店,但他總是記不住有什麼店,如果用hash的key去紀錄"XX店"再去取其value,就只能用XX店當索引值,但是對記憶力不好的小華來說,記得店名實在有困難,因此我使用Array去紀錄,當小華想要知道第2間店是誰,包含店名、電話、商品等相關資訊:

puts store[1]

執行結果:
{:store_name=>"台中店", :phone=>"04-987-6543", :product_all=>{:noodle=>{:price=>80, :quantity=>50}, :soup=>{:price=>20, :quantity=>12}, :pizza=>{:price=>50, :quantity=>1}}}


step 3:
小華只想知道這間店販售了多少品項的東西,不需要第2間店的詳細資料(phone、adress、manager等):

puts store[1][:product_all]

執行結果:
{:noodle=>{:price=>80, :quantity=>50}, :soup=>{:price=>20, :quantity=>12}, :pizza=>{:price=>50, :quantity=>1}}


step 4:
小華現在要針對Pizza這個品項做些管理,發現數量低於5,表示銷售非常好,想再增加進貨量,並且與該供應商議價,希望取得比原先cost還低的價格:

puts store[1][:product_all][:pizza][:quantity] < 5

執行結果:
true

puts store[1][:product_all][:pizza]

執行結果:
{:price=>50, :quantity=>1, :manufacturer=>'ccc company', :cost=>30}


以上是我設計這個資料結構的想法,當然也還有很多種排列組合,每一層要用array還是hash包資料都可以,沒有好與壞,優先考慮的是自己想要如何撈取資料,再來決定什麼方式最適合。

學無止盡,每天進步一點點!


上一篇
Day 4 - 資料型態介紹:Array & Hash
下一篇
Day 6 - Hash的key比較適合用Symbol?
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言