2

次の値で文字列を定義します。

var filterMe = "foo=1;bar=foo+5;foobar=foo+5-bar;";

そして、次のように文字列を分割する配列を作成します。

var splitter = filterMe.Split(';');

Dictionary<string,string> dictionary = new Dictionary<string, string>();

foreach (var split in splitter)
        {
            if (!string.IsNullOrEmpty(split))
            {
                var part = split.Split('=');
                dictionary.Add(part[0], part[1]);
            }
        }

したがって、この "bar=foo+5" の辞書での結果は、この "bar","foo+5" のように定義されます。

そして今、私の質問は、値「foo+5」の「foo」を、値「1」を含むキー「foo」に変更するにはどうすればよいですか? 文字列 filterMe はより長く動的になるため、複数の変数 (foo) が含まれます。

編集:私の質問は少し混乱しているように見えるので、以下を参照してください:

var foo=200;
var bar = foo+300;

変数 bar は次のようになります。

var bar = 200+300;
4

4 に答える 4

0

次のテストに合格します: (パフォーマンスに関する考慮事項はまったくありません)

[Test]
public void tst()
{
    var filterMe = "foo=1;bar=foo+5;foobar=foo+5-bar;";
    var dic = filterMe.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
                      .ToDictionary(x => x.Split('=')[0], x => x.Split('=')[1]);

    while (true)
    {
        var kvpToApply = dic.Keys
                            .Join(dic, x => true, y => true, (key, value) => new { key, value })
                            .FirstOrDefault(x => x.value.Value.Contains(x.key));
        if (kvpToApply != null)
        {
            dic[kvpToApply.value.Key] = kvpToApply.value.Value.Replace(kvpToApply.key, dic[kvpToApply.key]);
        }
        else
        {
            break;
        }
    }

    Assert.AreEqual("1", dic["foo"]);
    Assert.AreEqual("1+5", dic["bar"]);
    Assert.AreEqual("1+5-1+5", dic["foobar"]);
}
于 2013-08-19T08:16:23.737 に答える