簡體   English   中英

轉換列表<int>到逗號分隔的字符串

[英]Converting a List<int> to a comma separated string

有沒有辦法將 List 轉換為逗號分隔的字符串?

我知道我可以循環並構建它,但不知何故,我認為你們中的一些人有一種更酷的方式來做到這一點?

我真的很想學習這些類型的“技巧”,所以請解釋或鏈接到有關您使用的方法的文檔。

List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())

簡單的解決辦法是

List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)

我剛剛在我的代碼中使用了它,工作起來很有趣。

List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));

對於這個問題的稍微復雜一點的版本的大約一億個解決方案——其中許多是緩慢的、有問題的,或者甚至不能編譯——請參閱我關於這個主題的文章的評論:

https://docs.microsoft.com/en-us/archive/blogs/ericlippert/comma-quibbling

和 StackOverflow 評論:

Eric Lippert 的挑戰“逗號狡辯”,最佳答案?

為了更酷,我會將其作為 IEnumerable<T> 上的擴展方法,以便它適用於任何 IEnumerable:

public static class IEnumerableExtensions {
  public static string BuildString<T>(this IEnumerable<T> self, string delim = ",") {
    return string.Join(delim, self)        
  }
}

使用方法如下:

List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));

我的“聰明”條目:

        List<int> list = new List<int> { 1, 2, 3 };
        StringBuilder sb = new StringBuilder();
        var y = list.Skip(1).Aggregate(sb.Append(x.ToString()),
                    (sb1, x) =>  sb1.AppendFormat(",{0}",x));

        // A lot of mess to remove initial comma
        Console.WriteLine(y.ToString().Substring(1,y.Length - 1));

只是還沒想好如何有條件地添加逗號。

似乎相當快。

IList<int> listItem = Enumerable.Range(0, 100000).ToList();
var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1));

您可以使用 System.Linq 庫; 它更有效:

using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM