如何使用Console.Writeline输出IEnumerable<(int a, int b, int c)>?

5

我正在完成一些计算机科学练习,但很尴尬地说,我不知道如何在VS Studio中打印上述代码。我已经尝试了好几天,部分原因是我实际上不知道上述结构的名称(比喻而言)。我已经做了功课,阅读了手册,但现在除了举手提问之外别无他法。在线上似乎有很多使用 IEnumerable<int> 的示例,但没有输出元组的示例代码。如果有人能够发布示例代码,将不胜感激。

public static class PythagoreanTriplet
{
    public static IEnumerable<(int a, int b, int c)> TripletsWithSum(int sum)
    {
        return Enumerable.Range(1, sum - 1)
                         .SelectMany(a => Enumerable.Range(a + 1, sum - a - 1)
                                                    .Select(b => (a: a, b:b, c: sum - a - b)))
                         .Where( x => x.a * x.a + x.b * x.b == x.c * x.c);

    }
}


public static class testclass
{
    public static void Main()
    {
        int input = 121;
        var data = PythagoreanTriplet.TripletsWithSum(input);
        Console.WriteLine(data);
    }
}

抱歉,您需要提供需要翻译的具体内容,我才能进行翻译工作。
System.Collections.Generic.List`1[System.ValueTuple`3[System.Int32,System.Int32,System.Int32]]
1个回答

6
您需要将元组分解为其各个部分,如下所示:
public static void Main()
{
    int input = 121;
    var data = PythagoreanTriplet.TripletsWithSum(input);
    foreach(var d in data)
        Console.WriteLine($"{d.a} {d.b} {d.c}");
}

由于Tuple类没有重写ToString函数,因此输出的是类名而不是组成Tuple的部分。您需要提供一种方法,使您的解决方案能够将自定义的Tuple转换为字符串以供使用。
另一个选项是创建一个表示您正在投影和返回的数据的类型,在TripletsWithSum中重写ToString函数以满足您的需求。
public class Tuple3Int : Tuple<int, int, int> 
{
    public Tuple3Int(int a, int b, int c) : base(a, b, c) { }

    public override string ToString()
    {
        return $"{Item1} {Item2} {Item3}";
    }
}

public static IEnumerable<Tuple3Int> TripletsWithSum(int sum)
{
    return Enumerable.Range(1, sum - 1)
                     .SelectMany(a => Enumerable.Range(a + 1, sum - a - 1)
                                                .Select(b => new Tuple3Int(a, b, sum - a - b)))
                     .Where(x => x.Item1 * x.Item1 + x.Item2 * x.Item2 == x.Item3 * x.Item3);

}

“另一个选项”作为元组可能有点尴尬,最好使用对你有意义的命名属性,这似乎几乎像勾股定理对象,也许?如果需要在生成后执行任何操作,则名为“PythagoreanTriple”的类,其属性为“A”,“B”和“C”可能更合适。 - Nathan Werry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接