LINQ應用實例-對字串陣列元素逐一做處理
| | | 1 | |
今天有個需求,要將某目錄下的圖檔清單轉成Javascript字串陣列,以方便網頁處理。例如: B:\100311\目錄下有F1.gif, F2.gif, F3.gif三個圖檔,便要產出var data = ["F1.gif","F2.gif","F3.gif"];,心血來潮,分別列出傳統組字串寫法、String.Join及應用LINQ概念的程式碼比較一番。
static void Main(string[] args)
{ StringBuilder sb = new StringBuilder(); //傳統寫法 sb.Append("var data = [");bool addComma = false;
foreach (string f in Directory.GetFiles("B:\\100311", "*.gif"))
{ string pureFileName = Path.GetFileName(f);sb.AppendFormat("{0}\"{1}\"", addComma ? "," : "", pureFileName);
addComma = true;}
sb.Append("];");Debug.WriteLine(sb.ToString());
//用String.Joinsb.Length = 0;
sb.Append("var data = [");List<string> l = new List<string>();
foreach (string f in Directory.GetFiles("B:\\100311", "*.gif"))
l.Add("\"" + Path.GetFileName(f) + "\"");
sb.Append(string.Join(",", l.ToArray()));
sb.Append("];");Debug.WriteLine(sb.ToString());
//使用LINQ概念,程式碼可以簡化成一行string r = "var data = [" +
string.Join(",",
Directory.GetFiles("b:\\100311", "*.gif")
//利用Select()對陣列做處理,只保留檔名部分,前後加上雙引號.Select(s => "\"" + Path.GetFileName(s) + "\"")
//轉回字串陣列 .ToArray()) + "];";Debug.WriteLine(r);
Console.Read();
}
Directory.GetFiles()傳回的string[],在.NET 3.5中可呼叫Select()配合Lambda表示法,直接將檔名中的路徑部分去掉,並在前後加上雙引號後,再透過.ToArray()傳回處理過的字串陣列,這樣就連foreach迴圈都免了。
程式碼變簡潔了(一行搞定,連StringBuilder都用不到),但看懂Code的門檻也變高,簡潔度及親和性如何取捨,大家再視狀況自行斟酌吧!
Comments
# by Phoenix
三種Code要看懂花的時間覺得差不多, 不過我討厭看很多Code@@ 簡潔對我來說就是親和