c# - 如何使用 LINQ 将泛型序列转换为三角形?

标签 c# linq combinatorics pascals-triangle

如果我有一个序列IEnumerable<T> (不是数字,只是 T ):

[ a, b, c, d ]

如何返回帕斯卡或弗洛伊德三角形的排序:

a
ab
abc
abcd

所以会是IEnumerable<IEnumerable<T>>

想知道是否有一种方法可以使用 LINQ 优雅地实现这一点,而不是使用循环手动实现。

最佳答案

这是一个方法:

T[][] ToTriangle<T>(IEnumerable<T> input)
{
    var inputAsList = input as List<T> ?? input.ToList();
    return inputAsList.Select((t, i) => inputAsList.Take(i + 1).ToArray()).ToArray();
}

从控制台应用程序:

static void Main(string[] args)
{
    var input = "Hello, world!";
    var output = ToTriangle(input);
    foreach (var set in output)
    {
        Console.WriteLine(string.Join("",set));
    }
    Console.ReadLine();
}

(字符串是字符数组。)

H
He
Hel
Hell
Hello
Hello,
Hello,
Hello, w
Hello, wo
Hello, wor
Hello, worl
Hello, world
Hello, world!

关于c# - 如何使用 LINQ 将泛型序列转换为三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43859725/

相关文章:

c# - 始终在 UWP 中的 FlipView 控件上显示导航箭头

c# - 编译时错误 父类(super class)型集合引用所引用的子类型集合对象

c# - 如何使用 LINQ 求和?

c# - 如何根据索引/行号从DataTable中选择行?

python - 检查两个嵌套列表在替换时是否等效

python - 使用 itertools 生成 2 个 1 和 3 个 0 的所有排列

c# - C# 中的端口映射不起作用

C# 根据 XSD 验证 XML

c# - 尝试使用 Linq to Entities 在简单表中查找记录时出错

r - 从 R 中的矩阵中选择 n 行具有最高组合值