首页 > 解决方案 > 合并项目列表中的子项目

问题描述

我想请您帮忙合并列表中的所有子项,如下所示:

public class Subitem
{
    public string Name { get; set; }
    public string Code { get; set; }
    public float Price { get; set; }
}

public class Item
{
    public string Name { get; set; }
    public string Code { get; set; }
    public List<Subitem> Subitems { get; set; }
}



var components = new List<Item>();
components.Add(new Item()
{
    Code = "ItemCode1",
    Name = "Item1Name",
    Subitems = new List<Subitem>
    {
        new Subitem { Code = "SubitemCode1", Price = 32 },
        new Subitem { Code = "SubitemCode2", Price = 21 },
        new Subitem { Code = "SubitemCode3", Price = 11 },
        new Subitem { Code = "SubitemCode4", Price = 51 }
    }
});
components.Add(new Item()
{
    Code = "ItemCode2",
    Name = "Item2Name",
    Subitems = new List<Subitem>
    {
        new Subitem { Code = "SubitemCode5", Price = 11 },
        new Subitem { Code = "SubitemCode6", Price = 22 },
        new Subitem { Code = "SubitemCode7", Price = 52 },
        new Subitem { Code = "SubitemCode8", Price = 63 }
    }
});
components.Add(new Item()
    {
        Code = "ItemCode3",
        Name = "Item3Name",
        Subitems = new List<Subitem>
        {
            new Subitem { Code = "SubitemCode9", Price = 11 },
            new Subitem { Code = "SubitemCode10", Price = 22 },
            new Subitem { Code = "SubitemCode11", Price = 52 },
            new Subitem { Code = "SubitemCode12", Price = 63 }
        }
    });
components.Add(new Item()
    {
        Code = "ItemCode4",
        Name = "Item4Name",
        Subitems = new List<Subitem>
        {
            new Subitem { Code = "SubitemCode13", Price = 11 },
            new Subitem { Code = "SubitemCode14", Price = 22 },
            new Subitem { Code = "SubitemCode15", Price = 52 },
            new Subitem { Code = "SubitemCode16", Price = 63 }
        }
    });

我想组合模型中的所有子项,如下所示:

new { Code = SubitemCode1, Price = 32 }
...
new { Code = SubitemCode8, Price = 63 }


new { Code = "SubitemCode1:SubitemCode5", Price = 43 } //11 + 32
...
new { Code = "SubitemCode1:SubitemCode8", Price = 95 } //32 + 63


new { Code = "SubitemCode2:SubitemCode5", Price = ... }
...
new { Code = "SubitemCode2:SubitemCode8", Price = ... }

@EDIT

new { Code = "SubitemCode1:SubitemCode5:SubitemCode9", Price = 54 } // 11 + 32 + 11
...
new { Code = "SubitemCode1:SubitemCode5:SubitemCode12", Price = 96 } // 11 + 32 + 63

new { Code = "SubitemCode1:SubitemCode6:SubitemCode9", Price = ... }
...
new { Code = "SubitemCode1:SubitemCode6:SubitemCode12", Price = ... }
...
new { Code = "SubitemCode1:SubitemCode8:SubitemCode9", Price = ... }
...
new { Code = "SubitemCode1:SubitemCode8:SubitemCode12", Price = ... }

new { Code = "SubitemCode2:SubitemCode5:SubitemCode9", Price = ... }
...

谁能向我解释如何继续下去?每个项目中可能有 1-5个项目和 1-10个子项目,我需要所有子项目的组合以及价格的添加。

来自它们所在项目的子项目,不可组合,只能来自其他项目的子项目

先感谢您,

此致。

标签: c#algorithmcombinations

解决方案


您可以简单地加入两个不同的列表,例如

var result = components[0].Subitems
             .Join(components[1].Subitems, x => true, y => true, (a, b) => new { Code = a.Code + ":" + b.Code, Price = a.Price + b.Price })
             .ToList();    

或者你可以使用 linq 来做到这一点

var result = from a in components[0].Subitems
             from b in components[1].Subitems
             select new
             {
                 Code = a.Code + ":" + b.Code,
                 Price = a.Price + b.Price
             };

最后打印结果

foreach (var item in result)
{
      Console.WriteLine("Code: " + item.Code + "\t Price: " + item.Price);
}

输出:

在此处输入图像描述


推荐阅读