首页 > 代码库 > 打印星号(*)三角形(C# Linq实现)的小例子
打印星号(*)三角形(C# Linq实现)的小例子
以前看面试宝典(C#)的时候,记得有一道题是打印三角形的。比如下图:
记得那时候刚学C#花了我好长时间才做出来,那是用的方法没有使用到linq,现在使用Linq重新做一次。以下是代码:
1 int empty = 10; 2 for (int i = 1; i <= empty; i++) 3 { 4 foreach (var c in Enumerable.Repeat(" ", empty - i)) 5 { 6 Console.Write(c); 7 } 8 foreach (var s in Enumerable.Repeat("* ", i)) 9 {10 Console.Write(s);11 }12 Console.WriteLine();13 }14 Console.WriteLine("Press enter to exit");15 Console.ReadKey();
解题思路:
观察看出,三角行的左侧,可以看成一个三角形,如下图的红色三角形所示:
可以把红色三角形,看成是字符串“ ”空格组成的倒三角形。示意图:一个方块代表一个“ ”字符串。
代码也可以写成函数式编程的风格(书上称这种语法的是方法语法):
1 int empty = 10; //empty是*的个数 2 for (int i = 1; i <= empty; i++) 3 { 4 Enumerable. //整体作用:输出空格三角型 5 Repeat(" ", empty - i).ToList(). //Repeat(TResult,int count)函数,控制每行的空格数。 6 ForEach(Console.Write); //ForEach(Action<T> action)函数,对每个元素都执行action函数,即每个元素都 7 //执行Console.Write函数 8 9 Enumerable.Repeat("* ", i).ToList().ForEach(Console.Write); //作用输出*号三角形10 11 Console.WriteLine(); //控制换行12 }
最近又看了看Linq编程,看到Repeat操作符就想起以前的程序,随手写了一个,加深印象。
重构代码:
提取参数empty和“*”和行数,使次函数不仅可以输出*三角形,还可以输出其他类型的三角形。比如+号三角形等。提取的函数为:
1 //打印*三角形 2 private static void PrintTriangle(string typeChar,int count) 3 { 4 int empty = count; 5 for (int i = 1; i <= empty; i++) 6 { 7 Enumerable.Repeat(" ", empty - i).ToList().ForEach(Console.Write); 8 Enumerable.Repeat(typeChar+" ", i).ToList().ForEach(Console.Write); 9 Console.WriteLine(); //控制换行10 }11 }
PrintTriangle("*",10);函数调用,输出与上图三角形相同。
PrintTriangle("+",10);PrintTriangle("0",5);输出下图所示:
打印星号(*)三角形(C# Linq实现)的小例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。