iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

Codewars Ruby Challenge in 30 Days系列 第 9

Codewars Ruby Challenge - Day 9/30

  • 分享至 

  • xImage
  •  

學習

  1. 當 select 遇見 hash:不像 array 的操作,對於 select 來說 hash 不再有 key 與 value 而是拆成兩個參數,判斷後再組回 hash
  2. select、find 與 find_all 差異:都是在做查找的動作,select 與 find_all 做的事情是一樣,找出符合條件的所有資料,但 find_all 會將傳入的 hash 改變成 array 傳出({"Java" => 10, "Ruby" => 80} -> [["Java", 10], ["Ruby", 80]]),find 則是回傳符合條件的第一筆

題目:

# 選出及格(60 分以上)的科目

def my_languages(scores)
  # 實作內容
end

答案需要過以下測試:

RSpec.describe do
  it "選出及格(60 分以上)的科目" do
    expect(my_languages({"Java" => 10, "Ruby" => 80, "Python" => 65})).to eq ["Ruby", "Python"]
    expect(my_languages({"Hindi" => 60, "Dutch" => 93, "Greek" => 71})).to eq ["Hindi", "Dutch", "Greek"]
    expect(my_languages({"C++" => 50, "ASM" => 10, "Haskell" => 20})).to eq []
  end
end

我的答案

def my_languages(scores)
  scores.select { |k, v| v >= 60 }.keys
end

思路:

  1. 看到要篩選就是 select 拉
  2. 原本想用 scores.select { |n| n.values ≥ 60}.keys 這樣寫,但發現 hash 在 select 上的操作跟 array 不同
  3. google select with hash 後找到適合的方式

龍哥建議的答案

def my_languages(scores)
  scores.select { |subject, score| score >= 60 }.keys
end

上一篇
Codewars Ruby Challenge - Day 8/30
下一篇
Codewars Ruby Challenge - Day 10/30
系列文
Codewars Ruby Challenge in 30 Days30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言