例如,如果我想创建一个程序,根据用户拥有的商品数量为其提供折扣。如果他们购买0-5件商品,他们不会得到折扣。如果他们购买5-10件商品,他们将获得5%的折扣,如果他们购买10-20件商品,他们将获得10%的折扣,以此类推。如何使用数组而不是许多"If“语句来对此进行排序?
发布于 2013-04-04 16:09:18
您可以维护一个数组来表示给定的范围。我说的是储存就像……比方说数组名是array,然后是array=5,即第一个间隔的最大值。然后array1=10第二个间隔的最大值,并以同样的方式进行。因为您刚刚维护的这个数组只包含少量的值,所以线性搜索没有性能问题。现在,如果numberOfOrderedItems小于value_of_array,您可以打破循环并决定您想要提供的折扣。
如果你保持大量的折扣间隔,那么使用二进制搜索而不是线性搜索。
发布于 2013-04-04 16:08:34
如何从存储边界和折扣的结构开始:
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 (9折)。如果需要,这可以与其他折扣等级一起扩展。
现场示例:http://rextester.com/YDOWS85239
https://stackoverflow.com/questions/15805521
复制相似问题