2015-11-02 21 views
6

文字列のリストをコンマ区切り文字列に変換する方法はありますか?文字列の配列をカンマ区切り文字列に変換して追加連結します

String[] data = new String[] { "test", "abc", "123" } 

に変換します。

'test', 'abc', '123' 

考えられる解決策:その後、

  1. サラウンド''を持つすべての文字列とリストにString.joinを使用しています。
  2. Foreachリスト内の各文字列と''','のと最後で連結を行うには、

最後','を取り除くの両方を行うための任意の単純LINQの(1行の式)がありますか?

+0

@vlug x = string.Join( "、"、yourArray); ' – slugster

+0

@slugster、私は私のアプローチでそれを言及したいと思います – Reddy

+0

サイドノート:JSONを構築しようとしていないことを確認してください...エンディング正方形の再構成ホイール。 –

答えて

15

集計LINQを使用することができ、両方を行うための任意の単純LINQの(1行の式)があります。

string.Join(",", data.Select(item => "'" + item + "'")) 

のLINQの基礎:トランスフォームはSelect文です。フィルターはWhereステートメントです。

Linqではない多くの文字列操作ツールがあり、それらは文字列用に最適化されている可能性が高いので、Linqに目を向ける前に常に見ています。

+2

私は今削除された別の質問にリンクしています - http://stackoverflow.com/a/33471600/232593 - 私のコードはおそらく私よりも優れた性能を持っていると思います。 Linqを使用していないにもかかわらず。 'return" '+文字列です。 –

+2

@AsadSaeeduddin - 回答を元に戻したい場合は、Linqが見つからないにしても、私は個人的にそれをアップアップすることを知っています。 –

+2

私はまたどこでもlinqを使用すると良いとは思わない。内部からlinqメソッドを見ると、単純なカウントをするだけでプログラム内で混乱が起きることがわかります! –

3

あなたは

Array.Skip(1).Aggregate(Array[0],(a,b) => string.Format("{0},'{1}'",a,b)); 
+0

スマートなソリューション。まだ 'linq'を勉強している/学んでいます:) – Reddy

+0

O(n^2)のパフォーマンスのために、カップルの項目で実際のコードにスマートなものを使用しないでください... –

1
String[] data = new String[]{"test","abc","123"}; 
var result = string.Join(",", data.Select(o => string.Concat("'",o,"'")); 
+0

スタイルの優先度 - なぜ' 'over' + 'は同じコードを生成しますか? –

+2

@AlexeiLevenkov私にとっては、 '+'や 'condition? 'のような他の操作が含まれているときに、' - '分離された引数を読む方が簡単です。真:偽」。 + "(a> 1)?" yes: "+変数:" no ")+" b "'と 'string.Concat(" a "、(a> 1)?" "+変数:" no "、" b ")' – Backs

0

また、集計方法使用することができます:あなたは、このようなLINQ文の末尾に.ToArray()を呼び出す必要がIEnumerableをまたは類似して開始している場合: 例:

List<string> fruit = new List<string> {"Apple", "Orange", "Pear", "Tomato", "Banana"}; 
var fruitSentence = fruit.Aggregate((current, next) => $"{current},{next}"); 
0

NOTEを:私の場合は

input parameter: IEnumerable<string> feederIdList  

var feederListString = String.Join(",", feederIdList.Select(feeder => "\"" + feeder + "\"").ToArray()); 

私は後でOracleストアドプロシージャに渡すためにそれを二重引用符を持っている各文字列を必要としていました。

関連する問題