2009-04-15 4 views
29

で区切られた文字列に文字列のリストを変換いただきましたものに依存カンマ(,区切り

+1

からの最初の文字を脱ぎます質問? "最速の方法は何ですか..." –

+0

最速のAND/OR効率が最も良いとは言えませんか? – spacemonkeys

答えて

95
String.Join(",", myListOfStrings.ToArray()) 
+0

ta blonde moment – spacemonkeys

+7

ToArray() '変換の前にnull/emptyチェックを追加するだけです:' myListOfStrings.Where(Function(s)Not String.IsNullOrEmpty(s))。ToArray() ' –

1

で区切られた値を持つ文字列に(列の)リストを変換するための最良の方法あなたは「最高」を意味します。メモリー量を最小限に抑えるには、最終的な文字列のサイズを最初に計算し、その容量のStringBuilderを作成し、それに文字列を追加します。

StringBuilderは正しいサイズの文字列バッファを作成し、バッファはToStringメソッドから文字列として取得します。これは、追加の中間文字列や配列が作成されていないことを意味します。

// specify the separator 
string separator = ", "; 

// calculate the final length 
int len = separator.Length * (list.Count - 1); 
foreach (string s in list) len += s.Length; 

// put the strings in a StringBuilder 
StringBuilder builder = new StringBuilder(len); 
builder.Append(list[0]); 
for (int i = 1; i < list.Count; i++) { 
    builder.Append(separator).Append(list[i]); 
} 

// get the internal buffer as a string 
string result = builder.ToString(); 
+4

Noあなたが「最高」という意味のものは、おそらく最高ではありません。 – mquander

+0

@mquander:それはメモリの消費量が最も少なく、最初の段落ではっきりと述べました。メモリの負荷を抑える必要がある場合は、これが明らかに最適な方法です。 – Guffa

+0

メモリの集中度の点で大きな違いはありません。 Joinメソッドに中間文字列はありません。それは単なる参考文献の配列です。 –

0

私のソリューション:

string = ["a","2"]\n 
newstring = "" 
endOfString = len(string)-1 
for item in string: 
    newstring = newstring + item 
if item != string[endOfString]: 
    newstring = newstring ","' 
+1

擬似コードは素晴らしいこともありますが、ここで実際の言語の実装が好まれます。 –

0

シンプルなソリューション:

dim str as string = "" 
for each item as string in lst 
    str += ("," & item) 
next 
return str.substring(1) 

スピード/パフォーマンスにこれをオンにしないで、なぜそれが文字列(",")