學習
-
select 上的篩選不一定是直接針對每個「||」:在不管在 map, select, each 時,過去都是直接對「||」內的值進行操作 ex. array.select { |a| a.to_i },透過今天的經驗發現可以做到 array.select { |a| array.count(a) > 1},間接操作的方式
題目:
# 計算不重複元素的總合
def non_repeat_sum(arr)
# 實作內容
end
答案需要過以下測試:
RSpec.describe do
it "計算不重複元素的總合" do
expect(non_repeat_sum([4,5,7,5,4,8])).to be 15
expect(non_repeat_sum([9, 10, 19, 13, 19, 13])).to be 19
expect(non_repeat_sum([16, 0, 11, 4, 8, 16, 0, 11])).to be 12
expect(non_repeat_sum([5, 17, 18, 11, 13, 18, 11, 13])).to be 22
expect(non_repeat_sum([5, 10, 19, 13, 10, 13])).to be 24
end
end
我的答案
def non_repeat_sum(arr)
arr.select { |e| arr.count(e) == 1 }.sum
end
思路:
- 觀察到重複的不會被計算到,只計算出現過一次的總和
- 不太知道如何刪掉重複的語法,查了一下 stackoverflow,就不小心看到能完美計算這題解答的方式
龍哥建議的答案
def non_repeat_sum(arr)
arr.select { |item| arr.count(item) == 1 }.sum
end