You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CustDiscount列表中匹配与文章分类层级最贴合的对象

解决文章分组层级与CustDiscount对象的最匹配问题

我来帮你搞定这个需求——核心就是找到与文章分组层级前缀匹配最长的CustDiscount对象对吧?咱们一步步来实现:

步骤1:解析文章ID,生成所有可能的分组层级路径

首先得把articleId拆分,提取出从最长到最短的分组路径列表。比如对于"3.1.2.4.2015",我们要得到的优先级从高到低的路径依次是:

  • "3.1.2.4"(完整三级子分组)
  • "3.1.2"(二级子分组)
  • "3.1"(一级子分组)
  • "3"(顶级分组)

如果文章ID的最后一位是动态数字(不是固定2015),可以用通用逻辑提取分组层级:

string articleId = "3.1.2.4.2015";
var idParts = articleId.Split('.');
// 取除最后一个元素外的所有部分,作为分组层级数组
var groupLevels = idParts.Take(idParts.Length - 1).ToArray();

// 生成从长到短的分组路径列表
var possibleGroups = Enumerable.Range(1, groupLevels.Length)
                               .Reverse()
                               .Select(n => string.Join(".", groupLevels.Take(n)))
                               .ToList();

步骤2:从CustDiscount列表中查找最匹配的对象

有了优先级从高到低的分组路径,我们只需要按顺序查找,第一个匹配Group属性的对象就是最精准的最长前缀匹配项:

// 假设你的折扣列表是这个
List<CustDiscount> discountList = GetYourDiscountList(); 

CustDiscount bestMatch = null;
foreach (var groupPath in possibleGroups)
{
    bestMatch = discountList.FirstOrDefault(d => d.Group == groupPath);
    if (bestMatch != null)
    {
        break; // 找到最长匹配,直接退出循环
    }
}

// 处理结果
if (bestMatch != null)
{
    Console.WriteLine($"找到最匹配折扣:客户{bestMatch.CustomerId},分组{bestMatch.Group},折扣{bestMatch.Discount:P}");
}
else
{
    Console.WriteLine("未找到任何匹配的分组折扣");
}

完整可运行示例

把逻辑整合起来,这里给你一个完整的测试代码:

using System;
using System.Collections.Generic;
using System.Linq;

public class CustDiscount {
    public string CustomerId { get; set; }
    public string Group{ get; set; }
    public decimal Discount { get; set; }
    public decimal Price { get; set; }
}

class Program
{
    static void Main()
    {
        // 模拟测试用的折扣列表
        var discountList = new List<CustDiscount>
        {
            new CustDiscount { CustomerId = "C001", Group = "3", Discount = 0.1m, Price = 100m },
            new CustDiscount { CustomerId = "C002", Group = "3.1", Discount = 0.15m, Price = 100m },
            new CustDiscount { CustomerId = "C003", Group = "3.1.2.4", Discount = 0.25m, Price = 100m },
            new CustDiscount { CustomerId = "C004", Group = "2.1", Discount = 0.2m, Price = 80m }
        };

        string articleId = "3.1.2.4.2015";
        var idParts = articleId.Split('.');
        var groupLevels = idParts.Take(idParts.Length - 1).ToArray();
        
        var possibleGroups = Enumerable.Range(1, groupLevels.Length)
                                       .Reverse()
                                       .Select(n => string.Join(".", groupLevels.Take(n)))
                                       .ToList();

        CustDiscount bestMatch = null;
        foreach (var groupPath in possibleGroups)
        {
            bestMatch = discountList.FirstOrDefault(d => d.Group == groupPath);
            if (bestMatch != null)
            {
                break;
            }
        }

        if (bestMatch != null)
        {
            Console.WriteLine($"=== 最匹配结果 ===");
            Console.WriteLine($"客户ID:{bestMatch.CustomerId}");
            Console.WriteLine($"匹配分组:{bestMatch.Group}");
            Console.WriteLine($"折扣率:{bestMatch.Discount:P}");
            Console.WriteLine($"原价:{bestMatch.Price:C}");
            Console.WriteLine($"折后价:{bestMatch.Price * (1 - bestMatch.Discount):C}");
        }
        else
        {
            Console.WriteLine("未找到任何匹配的分组折扣信息");
        }
    }
}

运行这段代码会输出匹配到的C003对象,也就是最长的3.1.2.4分组对应的折扣。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:07:34