在撰寫代碼 Kata 時,我遇到了一個輕微的邏輯問題,我無法找到解決方案。這不是完成任務的硬性要求,但它讓我對如何處理它很感興趣。
Kata 正在通過一系列定價規則模擬應用定價折扣和超市結賬(請參閱此處的完整 Kata )。為了玩轉一些繼承和介面功能,我添加了“買 X 送 Y”的規則。Y當有問題時它作業正常1,但在那之后開始變得有點朦朧......
例如,我嘗試了“購買3,2免費”的想法。我嘗試通過將物品分組為 5 個一組,并通過減去其中兩個物品的價格來計算每組的折扣:
public override double CalculateDiscount(Item[] items)
{
//per the example described above
//_groupSize = 5, _buy = 3
//meaning 2 out of every group of 5 items should be free
var discountGroups = new List<IEnumerable<Item>>();
for (var i = 0; i < items.Length / _groupSize; i )
{
discountGroups.Add(items.Skip(i * _groupSize).Take(_groupSize));
}
return discountGroups
.Sum(group => group
.Skip(_buy)
.Sum(item => item.Price)
);
}
我發現上面的代碼按預期作業(如果每個專案都有一個Price屬性1.00,上面會回傳2.00)。我希望解決的一個極端情況是,在添加第五個專案之前它不會生效(所以你為每個專案做廣告的價格會變為1.00, 2.00, 3.00, 4.00, 3.00)。
我最理想的情況是,一旦你的收藏中有三件物品,接下來的兩件是免費的,無論你選擇只拿一件還是兩件都不應該影響價格。我知道這對領域來說不是很現實,但我有興趣嘗試將其作為技術問題來解決。
我有一些裂縫,但沒有成功地比上面的代碼更接近。我認為我需要做的是將陣列分組為所需的最少購買物品數量,然后是可變數量的免費物品。我可能可以硬編碼一些東西來解決這個問題,但是如果我要模擬購買 3 件商品并免費獲得 2 件商品,然后購買 3 件商品但只拿一件免費商品,這會變得復雜。
任何有關如何解決此問題的建議將不勝感激!
謝謝,馬克
uj5u.com熱心網友回復:
您的折扣計算有一些錯誤,例如,如果專案計數小于 groupSize,您不會創建組。所以i <改為i <=:
for (var i = 0; i <= items.Length / groupSize; i )
{
discountGroups.Add(items.Skip(i * groupSize).Take(groupSize));
}
也許這已經是全部了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521691.html
標籤:C#数组林克片
上一篇:Linq按條件分組
下一篇:SQL查詢等于linq
