一千萬個為什麽

搜索

在類層次結構中查找最小值

給定以下類(假設它們已填充),那麽如何找到 test1 實例的任何 val 的最小值?

    public class test1
    {
        public int val;
        public List Tests;
    }

    public class test2
    {
        public int val;
        public List Tests;
    }

    public class test3
    {
        public int val;
        public List Tests;
    }

    public class test4
    {
        public int val;
    }

最佳答案

您可以在頂級類中編寫一個方法,將結構壓縮成IEnumerable。

public IEnumerable FlattenVal()
{
    yield return this.val;
    foreach (var t2 in this.Tests)
    {
        yield return t2.val;
        foreach (var t3 in t2.Tests)
        {
            yield return t3.val;
            foreach (var t4 in t3.Tests)
            {
                yield return t4.val;
            }
        }
    }
}

那麽你可以這樣稱呼它:

var t = new Test1();

Console.WriteLine(t.FlattenVal().Min());

如果您不能直接將方法添加到類中(非部分,生成的代碼或庫中),那麽您可以使用擴展方法:

public static IEnumerable FlattenVal(this Test1 t1)
{
    yield return t1.val;
    foreach (var t2 in t1.Tests)
    {
        yield return t2.val;
        foreach (var t3 in t2.Tests)
        {
            yield return t3.val;
            foreach (var t4 in t3.Tests)
            {
                yield return t4.val;
            }
        }
    }
}

轉載註明原文: 在類層次結構中查找最小值