2011-05-10 107 views
2

每隔一段時間,我需要在循環收集時創建一個字符分隔的字符串。信不信由你,總會有第一個或最後一個分隔符被阻擋! :)通常,我最終會砍掉額外的字符,這是另一行代碼。我可以離開那裏,但出於好奇,有沒有人有這樣做的很酷的「smooooth」方式? (在C#和/或JavaScript)從集合中構建字符分隔字符串的好方法是什麼?

例子:

{"Joe", "Jane", "Jim"} 

建設逗號分隔字符串後,我們得到:

"Joe, Jane, Jim, "", Joe, Jane, Jim"

尋找建立

一個很酷的方式
"Joe, Jane, Jim" 

沒有任何字符串「切碎」後。

+0

我一直認爲必須有一個更清潔的方式,但我想砍的最後一個字符關閉是相當有效,因爲你不必檢查每一個迭代。或者循環遍歷除最後一個,然後追加最後一個。 – 2011-05-10 22:03:40

+0

@E Ronnoco - 同意。我寧願有一行「砍」的代碼,而不是一個討厭的if語句在它的中間:) – Dimskiy 2011-05-10 22:12:09

回答

2

在Javascript中很容易:

var input = ["Joe", "Jane", "Jim"]; 

var str = input.join(','); // Output: Joe,Jane,Jim 

大多數語言都有某種形式的 「加入」 無論是內置或在某些庫:


順便說一句,如果你正在寫這樣的功能,你應該只使用一張支票不能在前面加上了 「膠水」第一次,而不是後來切碎的字符串:

var items = ["joe","jane","john"]; 
var glue = ","; 
var s = ""; 
for (var i=0; i < items.length; i++) { 
    if (i != 0) s += glue; 
    s += items[i]; 
} 
+0

但我不知道'.join()'的工作原理...... :) – 2011-05-11 09:06:00

1

在Javascript中,如果您的集合是一個數組,你可以調用它的連接功能:在這裏

var arr = ["Joe", "Jane", "Jim"] 

var str = arr.join(","); 

海峽會給:

"Joe, Jane, Jim" 
2

大多數語言都有一個joinimplode功能,將採用一個集合或數組或者你所擁有的,並且將用你選擇的字符串'連接'該數組的元素。

的Javascript:

array.join(',') 

C#:

String.Join(',', array); 
0

還不如馬克·科斯特洛的回答爲好,但this工作

0

如果你有一個數組,你可以arr.join(', ');。如果你的意思是一個對象({}),那麼你必須迭代。

var str =''; 
for (var x in obj) if (obj.hasOwnProperty(x)) 
    str += (str.length ? ', ' : '') + obj[x]; 

可能更有效率,雖然我懷疑它的問題。

var str ='', append = false; 
for (var x in obj) if (obj.hasOwnProperty(x)) { 
    str += (append ? ', ' : '') + obj[x]; 
    append = true; 
}