如何使用数组选择一个数字范围,然后选择所需的输出?

问题描述:

例如,如果我想创建一个程序,根据他们有多少物品给予一个人折扣。如果他们购买0-5件商品,他们不会得到折扣。如果他们购买5-10件商品,他们可以享受5%的折扣,如果他们得到10-20件商品,可以享受10%的折扣等等。我如何使用数组来排序而不是许多“If”语句?如何使用数组选择一个数字范围,然后选择所需的输出?

+4

你试过一些东西..或者外包...... – Shashi 2013-04-04 07:57:18

+0

和20-30项,你期望放弃什么? – Tigran 2013-04-04 08:00:36

可以保持数组来表示你已经给定的范围。我说的是存储像.... 说数组名称是数组然后数组[0] = 5即第一个区间的最大值。然后数组[1] =第二个间隔的最大值10,并以相同的方式继续。因为您刚刚维护的这个数组只包含少量值,所以线性搜索没有性能问题。 现在,如果numberOfOrderedItems小于value_of_array,则可以打破循环并决定要给予的折扣。

如果您保持大量的折扣间隔,那么去二进制搜索而不是线性搜索。

+0

这是一个通用算法...我没有使用C#,所以我不能用C#解释# – 2013-04-04 08:10:07

+0

你可以用伪代码来实现吗? – Sabotenderizer 2013-04-04 08:32: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(10%折扣)。如果需要,可以使用其他折扣括号进行扩展。

活生生的例子:http://rextester.com/YDOWS85239

+0

小问题:您发布的代码会将5件物品放入“无折扣”的插槽中,并且OP会在“5%折扣”插槽中加入它。也许你应该改变你的范围,从半开放的时间间隔到封闭的(即包含的)时间间隔。 – 2013-04-04 08:34:11

+0

@MthetheWWatson - 不错的位置,但是如果5以0-5或者5-10进入,则OP不清楚。 – Jamiec 2013-04-04 08:55:49