C#中有一個函數來快速將某些集合轉換爲字符串並用分隔符分隔值嗎?C#列表<string>與分隔符字符串
例如:
List<string> names
- >string names_together = "John, Anna, Monica"
C#中有一個函數來快速將某些集合轉換爲字符串並用分隔符分隔值嗎?C#列表<string>與分隔符字符串
例如:
List<string> names
- >string names_together = "John, Anna, Monica"
您可以使用String.Join
。如果你有一個List<string>
那麼你可以撥打ToArray
第一:
List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());
在.NET 4中,您不需要再ToArray
,因爲是需要一個IEnumerable<string>
的String.Join
過載。
你也可以做到這一點使用LINQ,如果你想
var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
雖然我更喜歡非LINQ語法Quartermeister的答案,我想Aggregate
可能執行速度較慢(可能更字符串連接操作)。
List<string> targets = new List<string>();
var InboxChecked = true;
var BannerChecked = false;
var EmailChecked = true;
if (InboxChecked)
{
targets.Add("Inbox");
}
if (BannerChecked)
{
targets.Add("Banner");
}
if (EmailChecked)
{
targets.Add("Email");
}
var index = 0;
if (targets.Any())
{
var aggregate = targets.Aggregate((s1, s2) =>
{
return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2;
});
// aggregate.Dump();
}
// returns -> Inbox and Email
這是爲什麼呢?它與OP幾乎沒有任何關係......? – Assimilater 2017-06-29 19:55:04
感謝您的快速回復,兩者都正常工作。你是對的我用Stopwatch類做了一個小的性能測量,而linq-way要慢得多:String.Join(「,」,names.ToArray()); - >花了18個刻度 總計((a,b)=> a +「,」+ b) - >花了736個刻度 – nan 2010-08-26 13:09:28
是的,我認爲Aggregate對於數學類型的操作更好。對於字符串這個操作,它與''for each''類似,只是附加到一個效率低下的字符串,因爲您要爲列表中存在的每個項目創建一個新的字符串。 – Bob 2010-08-26 13:26:11
請注意,如果容器爲空,則沒有種子值的聚合將引發InvalidOperationException。使用種子版本Aggregate(seed,func)來避免錯誤處理代碼或條件檢查。 String.Join不會拋出空,所以不需要種子或額外的代碼......再加上它不需要Linq並且語法更清晰一些。 – Huacanacha 2015-11-25 21:58:48