標籤:style blog http io ar color 使用 sp for
以前看面試寶典(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實現)的小例子