2011-02-10 5 views
-2

こんにちは私は辞書の値を連結しようとしています。Cの辞書のConcat TkeyとTValue

私が達成したい事はある:

が処理鍵を取り、同じ辞書でTValueにこれを追加します。

どのようにこの仕事をするかについての手掛かり。

+5

良いスタートの助けを得るために、以前の答えを受け入れることです – Andrey

+0

そして、あなたはまた、より多くのコンテキストを提供する必要があります。あなたは具体的なタイプを知っていますか?そうでない場合は、どのように「追加」を定義しますか? – driis

+0

ここには役に立つ情報はありませんでした。あなたは文字列を連結する方法を尋ねていますか?そうでない場合、あなたは何をしようとしていますか?連結された文字列で何をしたいですか?そしてそれは辞書オブジェクトにどのように関連していますか? –

答えて

2

var result = 
    dictionary 
    .Aggregate(
     new StringBuilder(), 
     (sb, kv) => 
      sb.AppendFormat(
       "({0}, {1}),", 
       kv.Key, 
       kv.Value 
      ) 
    ) 
    .ToString() 
    .TrimEnd(','); 

別ルート@Kirk Wollによって示唆されているように

var result = 
    string.Join(
     ",", 
     dictionary 
     .Select(kv => string.Format("({0}, {1})", kv.Key, kv.Value)) 
     .ToArray() // This is not necessary in .NET 4.0 
    ); 
+0

+1。興味深い集計の使用。このようにすることは決して考えなかった。 – Skurmedel

+1

ええと、私は 'string.Join'を代わりに使うでしょう。そうすれば、あなたは、' .TrimEnd( '、') 'のようなハッキングを避けることができます。 –

+0

@Kirk - これは実際に取るには良い方向です。 'Join'は' unsafe'コードを使いますので、かなりうまくいくはずです。 – ChaosPandion

3

これを何で/なぜ必要なのかを完全にはっきりさせることはできませんが、キーに値を「追加」します( '+'演算子がキー/値型で動作すると仮定します)。

dictionary.Select(x => x.Key + x.Value) 
3

文字列表記が必要ですか?

私がもしそうなら、このようなものでいいと思う:

public static class KeyValuePairEx 
{ 
    public static string ConcatToString<TKey, TValue>(this KeyValuePair<TKey, TValue> source) 
    { 
     return string.Format("{0} {1}", source.Key, source.Value); 
    } 
} 

使用法:これは、LINQと十分に単純である

Dictionary<int, string> dict = GetDictionary(); 

foreach (var entry in dict) 
{ 
    Console.WriteLine(entry.ConcatToString()); 
} 
関連する問題