6

Dictionary<string,string>グループ化したいものがあります。キーと値のペアのサンプルを次に示します

==========================
| Key            | Value |
==========================
| A_FirstValue   | 1     |
| A_SecondValue  | 2     |
| B_FirstValue   | 1     |
| B_SecondValue  | 2     |
==========================

ここで、文字の最初のインスタンスの前にあるキーの最初の文字または単語に従ってグループ化します。'_'

したがって、最終結果はになりますDictionary<string, Dictionary<string, string>>。上記の例の場合、結果は次のようになります。

A -> A_FirstValue, 1
     A_SecondValue, 2

B -> B_FirstValue, 1
     B_SecondValue, 2

これも可能ですか?私を助けてくれる人はいますか?

ありがとう。

4

3 に答える 3

9

さて、あなたは使うことができます:

var dictionary = dictionary.GroupBy(pair => pair.Key.Substring(0, 1))
       .ToDictionary(group => group.Key,
                     group => group.ToDictionary(pair => pair.Key,
                                                 pair => pair.Value));

グループ部分は を提供IGrouping<string, KeyValuePair<string, string>>し、その後ToDictionaryはキーと値のペアの各グループを辞書に変換します。

編集:これは常に最初の文字を使用することに注意してください。もっと複雑な場合は、おそらく別のメソッドを作成し、ラムダ式ExtractFirstWord(string)でそれを呼び出します。GroupBy

于 2012-05-09T13:13:49.383 に答える
0

これが私が思いついたものです。_キーにが存在することを確認するためにエラー処理が必要ですが、開始する必要があります。

        var source = new Dictionary<string, int>();

        source.Add("A_FirstValue", 1);
        source.Add("A_SecondValue", 2);
        source.Add("B_FirstValue", 1);
        source.Add("B_SecondValue", 3);

        var dest = new Dictionary<string, Dictionary<string, int>>();

        foreach (KeyValuePair<string, int> entry in source) {
            string prefix = entry.Key.Split('_')[0];
            if (!dest.ContainsKey(prefix)) {
                dest.Add(prefix, new Dictionary<string, int>());
            }

            dest[prefix].Add(entry.Key, entry.Value);

        }
于 2012-05-09T13:19:27.780 に答える
0
yourDictionary
    .GroupBy(g => g.Key.Substring(0, 1))
    .ToDictionary(k => k.Key, v => v.ToDictionary(k1 => k1.Key, v1 => v1.Value));
于 2012-05-09T13:12:40.433 に答える