學習
-
判斷陣列是否為空的方式:其實有非常多種,像是 length, empty?, blank?,都能達到同樣目的。如果是用在 rails 做 ORM 查詢上要判斷資料是否為空,empty 與 blank 則有差異,query 的做法 empty 是用 count,blank 則是用 preloading (參考資料)
-
Range 後的資料用 array 裝:直覺的方式是 (1..5).to_a 這樣的寫法,這次學到龍哥用另一種方法 [*(1..5)],星星符號在 ruby 內有炸開或收合的功能,所以這種方法其實是「把 range 1 到 5 所有的數字收合在陣列裡面」
題目:
# 找出缺少的數字,例如 [-3, -2, 1, 5] 少了 -1、0、2、3、4 這幾個數字。
def find_missing_numbers(array)
# 實作內容
end
答案需要過以下測試:
RSpec.describe do
it "找出缺少的數字" do
expect(find_missing_numbers([-3,-2,1,4])).to eq [-1,0,2,3]
expect(find_missing_numbers([-1,0,1,2,3,4])).to eq []
expect(find_missing_numbers([])).to eq []
expect(find_missing_numbers([0])).to eq []
expect(find_missing_numbers([-4,4])).to eq [-3,-2,-1,0,1,2,3]
end
end
我的答案
def find_missing_numbers(array)
if array.any?
(array[0]..array[-1]).to_a - array
else
[]
end
end
思路:
- 先找出給進 array 的最大值與最小值
- 用 range 產生出完整的 array,扣除給進的 array
- 多判斷如果是空 array,要回傳空 array
龍哥建議的答案
def find_missing_numbers(array)
if array.length < 2
[]
else
[*array.min..array.max] - array
end
end