You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中如何创建匹配数值范围/数量区间与价格的并行数组并计算订单总金额

针对你的C#并行数组与定价计算问题的解决方案

嘿,我来帮你一步步梳理这两个技术需求的解决方案:

问题1:创建存储数值范围但仅含少量价格的并行数组

首先明确:C#没有专门用于“并行数组”的特定关键字,但我们可以通过逻辑关联两个数组(或者用更优雅的面向对象方案)来实现「数值范围对应价格」的映射。

并行数组的核心思路是让两个数组的索引一一对应——比如一个数组存区间边界,另一个存对应价格,通过索引关联两者的关系。不过直接用这种方式要注意逻辑严谨性,避免索引错位。


问题2:基于数量区间的定价数组设计与金额计算

你原来的代码思路有个明显问题:如果把每个餐品数量都塞进mealOrder数组,不仅代码冗余(要写40个元素),而且扩展性极差(比如后续数量上限调到100,代码会变得非常臃肿)。下面是更合理的实现方案:

方案1:用区间边界数组实现「伪并行数组」

我们只需要存储每个定价区间的上限值和对应的单价,通过逻辑判断找到对应区间:

// 存储每个区间的上限(最后一个用int.MaxValue代表“40及以上”)
int[] quantityUpperLimits = { 10, 20, 39, int.MaxValue };
decimal[] unitPrices = { 14.99M, 12.50M, 10.75M, 9.45M };

// 根据订购数量获取对应单价的方法
public static decimal GetUnitPrice(int orderQuantity)
{
    for (int i = 0; i < quantityUpperLimits.Length; i++)
    {
        if (orderQuantity <= quantityUpperLimits[i])
        {
            return unitPrices[i];
        }
    }
    return 0; // 处理无效数量(比如0或负数)
}

// 计算订单总金额
int orderedMeals = 25;
decimal totalAmount = orderedMeals * GetUnitPrice(orderedMeals);
Console.WriteLine($"总金额:{totalAmount:C}"); // 输出:总金额:$268.75

方案2:更推荐的面向对象实现(可读性&扩展性更强)

如果你的业务逻辑后续可能调整定价区间,用自定义类封装定价规则会更清晰:

// 定义定价区间类
public class MealPricingTier
{
    public int MinQuantity { get; set; }
    public int? MaxQuantity { get; set; } // 用null表示无上限
    public decimal UnitPrice { get; set; }
}

// 初始化定价规则列表
var pricingTiers = new List<MealPricingTier>
{
    new MealPricingTier { MinQuantity = 1, MaxQuantity = 10, UnitPrice = 14.99M },
    new MealPricingTier { MinQuantity = 11, MaxQuantity = 20, UnitPrice = 12.50M },
    new MealPricingTier { MinQuantity = 21, MaxQuantity = 39, UnitPrice = 10.75M },
    new MealPricingTier { MinQuantity = 40, MaxQuantity = null, UnitPrice = 9.45M }
};

// 获取单价的方法(用LINQ简化逻辑)
public static decimal GetUnitPrice(int orderQuantity, List<MealPricingTier> tiers)
{
    var matchingTier = tiers.FirstOrDefault(tier => 
        orderQuantity >= tier.MinQuantity && 
        (tier.MaxQuantity == null || orderQuantity <= tier.MaxQuantity));
    
    return matchingTier?.UnitPrice ?? 0; // 无匹配时返回0,可根据需求调整
}

// 计算总金额
int orderedMeals = 45;
decimal totalAmount = orderedMeals * GetUnitPrice(orderedMeals, pricingTiers);
Console.WriteLine($"总金额:{totalAmount:C}"); // 输出:总金额:$425.25

关键总结

  • C#没有专门的“并行数组”关键字,通过索引关联两个数组是最直接的实现方式,但面向对象的方案更适合长期维护;
  • 不要存储每个具体数量,而是存储区间边界,能极大减少代码冗余并提升扩展性;
  • 计算总金额时,先通过数量匹配到对应单价,再执行数量 × 单价的计算即可。

内容的提问来源于stack exchange,提问作者tengkuzulfadli

火山引擎 最新活动