首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用数组选择一个数字范围,然后选择所需的输出?

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

Stack Overflow用户
提问于 2013-04-04 15:55:44
回答 2查看 249关注 0票数 1

例如,如果我想创建一个程序,根据用户拥有的商品数量为其提供折扣。如果他们购买0-5件商品,他们不会得到折扣。如果他们购买5-10件商品,他们将获得5%的折扣,如果他们购买10-20件商品,他们将获得10%的折扣,以此类推。如何使用数组而不是许多"If“语句来对此进行排序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 16:09:18

您可以维护一个数组来表示给定的范围。我说的是储存就像……比方说数组名是array,然后是array=5,即第一个间隔的最大值。然后array1=10第二个间隔的最大值,并以同样的方式进行。因为您刚刚维护的这个数组只包含少量的值,所以线性搜索没有性能问题。现在,如果numberOfOrderedItems小于value_of_array,您可以打破循环并决定您想要提供的折扣。

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

票数 1
EN

Stack Overflow用户

发布于 2013-04-04 16:08:34

如何从存储边界和折扣的结构开始:

代码语言:javascript
复制
public struct DiscountSpec
{
   public int MinItems{get;set;}
   public int MaxItems{get;set;}
   public double Discount{get;set;}
}

将其放入数组中

代码语言:javascript
复制
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},
}

然后神奇的是

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15805521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档