如何使用动态嵌套类生成表/矩阵

时间:2019-04-12 17:04:11

标签: c# loops collections .net-core

如何为每个带有动态标签列表的选项生成表格(矩阵或其他类型的列表/类)。 可以有(x)个选项,每个选项可以有(y)个标签。

选项类别

public class Option
{
    public Option()
    {
        Tags = new HashSet<Tag>();
    }

    public string Name { get; set; }
    public ICollection<Tag> Tags { get; set; }
}

标记类

public class Tag
{
    public string Value { get; set; }
}

主要代码

var option1 = new Option() { Name = "Option1" };
var option2 = new Option() { Name = "Option2" };

option1.Tags = new List<Tag>();
option2.Tags = new List<Tag>();

var tag1 = new Tag() { Value = "tag1" };
var tag2 = new Tag() { Value = "tag2" };
var tag3 = new Tag() { Value = "tag3" };
var tag4 = new Tag() { Value = "tag4" };
var tag5 = new Tag() { Value = "tag5" };

option1.Tags.Add(tag1);
option1.Tags.Add(tag2);
option2.Tags.Add(tag3);
option2.Tags.Add(tag4);
option2.Tags.Add(tag5);

预期结果:

//Console Output
tag1  tag3
tag1  tag4
tag1  tag5
tag2  tag3
tag2  tag4
tag2  tag5

到目前为止,我没有找到有效的代码。(使用GenFu生成数据)

 private static void Main(string[] args)
    {
        List<List<Tag>> TagList = new List<List<Tag>>();
        List<int> TagOrder = new List<int>();

        List<Option> Options = A.ListOf<Option>(2);
        foreach (Option option in Options)
        {
            option.Tags = A.ListOf<Tag>(2);
        }

        foreach (Option option in Options)
        {
            TagList.Add(option.Tags.ToList());
        }

        foreach (var item in TagList)
        {
            TagOrder.Add(item.Count);
        }
        int run = 0;
        int optionrun = 0;
        var runCount = TagOrder.Aggregate((x, y) => x * y);
        for (int h = 0; h < runCount + 1; h++)
        {
            try
            {
                var word = Options[optionrun].Tags.ToList()[run].Value;
                Console.WriteLine(word);
                optionrun++;
            }
            catch (Exception)
            {
                optionrun = 0;
                run++;
                Console.WriteLine("");
            }
        }

        Console.ReadLine();

        static int RandomNumber(int min, int max)
        {
            Random random = new Random(); return random.Next(min, max);
        }
    }

0 个答案:

没有答案