例如,如果我想创建一个程序,根据某人拥有的物品数量为他们提供折扣。如果他们要购买 0-5 件商品,他们不会获得折扣。如果他们购买 5-10 件商品,他们将获得 5% 的折扣,如果他们购买 10-20 件商品,他们将获得 10% 的折扣,依此类推。如何使用数组而不是许多“If”语句来排序?
问问题
267 次
2 回答
2
如何从存储边界和折扣的结构开始:
public struct DiscountSpec
{
public int MinItems{get;set;}
public int MaxItems{get;set;}
public double Discount{get;set;}
}
把它放在一个数组中
DiscountSpec[] discounts = new DiscountSpec[]
{
new DiscountSpec(){MinItems=0,MaxItems=5,Discount=0},
new DiscountSpec(){MinItems=5,MaxItems=10,Discount=0.05},
new DiscountSpec(){MinItems=10,MaxItems=20,Discount=0.10},
}
然后是魔法
int numItemsPurchased=7;
var discount = discounts.Where(
d => d.MinItems<numItemsPurchased && d.MaxItems>=numItemsPurchased)
.Select(d => d.Discount)
.FirstOrDefault();
现在,discount
将包含0
(无折扣)或0.05
(5% 折扣)或0.1
(10% 折扣)。如果需要,可以使用其他折扣范围进行扩展。
于 2013-04-04T08:08:33.960 回答
1
您可以维护一个数组来表示您给定的范围。我说的是存储...。说数组名称是数组然后数组[0] = 5,即第一个间隔的最大值。然后 array[1]=10 第二个间隔的最大值并以相同的方式进行。因为你刚刚维护的这个数组只包含少量的值,所以线性搜索没有性能问题。现在,如果 numberOfOrderedItems 小于 value_of_array 您可以打破循环并决定您想要给予的折扣。
如果您要维护大量折扣间隔,请使用二进制搜索而不是线性搜索。
于 2013-04-04T08:09:17.693 回答