2

文字列 "a:b;c:d,e;f:g,h,i" が与えられた場合、文字列を 2 つの列のフラットなリストに分割し、それぞれがキー (コロンの左側) に対応するようにします) と値 (コロンの右側にカンマ区切り)。結果は次のようになります。

{
    Key: "a",
    Value: "b"
},
{
    Key: "c",
    Value: "d"
},
{
    Key: "c",
    Value: "e"
},
{
    Key: "f",
    Value: "g"
},
{
    Key: "f",
    Value: "h"
},
{
    Key: "f",
    Value: "i"
}

問題は、KeyValue のリストのリストではなく、KeyValue の単一のリストを返すように、すべてのキーにまたがるカンマの 2 番目の分割の結果を平坦化できないことです。

public class KeyValue {
    public string Key { get; set; }
    public string Value { get; set; }
}

List<KeyValue> mc = "a:b;c:d,e;f:g,h,i"
    .Split(';')
    .Select(a =>
    {
        int colon = a.IndexOf(':');
        string left = a.Substring(0, colon);
        string right = a.Substring(colon + 1);
        List<KeyValue> result = right.Split(',').Select(x => new KeyValue { Key = left, Value = x }).ToList();
        return result;
    })
    .ToList();

ご協力いただきありがとうございます。

4

5 に答える 5

0

新しい を返す必要はありませんList<KeyValue> resultKeyValue以下のように a を返すだけです

string data = "a:b;c:d,e;f:g,h,i";

var mc = data
    .Split(';')
    .Select(a =>
    {
        int colon = a.IndexOf(':');
        string left = a.Substring(0, colon);
        string right = a.Substring(colon + 1);
        return new KeyValue() { Key = left, Value = right };
    }).ToList();
于 2013-04-18T16:46:23.240 に答える