Скажем, что у меня есть общий словарь с данными вроде этого (надеюсь, здесь обозначение будет понятным):
{ "param1" = > "value1", "param2" = > "value2", "param3" = > "value3" }
Я пытаюсь использовать функцию Enumerable.Aggregate, чтобы сбрасывать каждую запись в словаре и выводить что-то вроде этого:
"/param1 = value1;/param2 = value2;/param3 = value3"
Если бы я собирал список, это было бы легко. С помощью словаря я получаю парные пары ключ/значение.
Вам не нужно Aggregate
:
String.Join("; ",
dic.Select(x => String.Format("/{0}={1}", x.Key, x.Value)).ToArray())
Если вы действительно хотите его использовать:
dic.Aggregate("", (acc, item) => (acc == "" ? "" : acc + "; ")
+ String.Format("/{0}={1}", item.Key, item.Value))
Или:
dic.Aggregate("",
(acc, item) => String.Format("{0}; /{1}={2}", acc, item.Key, item.Value),
result => result == "" ? "" : result.Substring(2));
Я считаю, что это соответствует вашим потребностям:
var dictionary = new Dictionary<string, string> {{"a", "alpha"}, {"b", "bravo"}, {"c", "charlie"}};
var actual = dictionary.Aggregate("", (s, kv) => string.Format("{0}/{1}={2}; ", s, kv.Key, kv.Value));
Assert.AreEqual("/a=alpha; /b=bravo; /c=charlie; ", actual);
Я думаю, что вы ищете что-то вроде этого:
var str = dic.Aggregate("", (acc, item) => {
if (acc != "")
acc += "; ";
acc += "/" + item.Key + "=" + item.Value;
return acc;
});
acc
.
String.Join
методString.Join
не проходитString.Join
по словарю (один раз для настройки массива и второй раз для объединения элементов массива)? Вы также создаете одноразовый массив, когда вы можете присоединиться к вашей строке так же, как вы проходите по элементам.