Dictionary<string, string>
다음과 같이 하루를 시작하는 간단한 것 :
var myDict = new Dictionary<string, string>();
myDict["A"] = "1";
myDict["B"] = "2";
myDict["C"] = "3";
myDict["D"] = "4";
문자열을 만들고 싶습니다 : "A=1;B=2;C=3;D=4"
구현 예 :
var myStringBuilder = new StringBuilder();
bool first = true;
foreach (KeyValuePair<string, string> pair in myDict)
{
if (first)
{
first = false;
}
else
{
myStringBuilder.Append(";");
}
myStringBuilder.AppendFormat("{0}={1}", pair.Key, pair.Value);
}
var myDesiredOutput = myStringBuilder.ToString();
사전에 10 개 미만의 항목이있을 가능성이 있으므로 StringBuilder가 과도하게 사용됨을 나타냅니다.
어떤 간결한 구현이 간결하고 효율적입니까? 프레임 워크에 도움이되는 기능이 있습니까?
답변
using System.Linq;
string s = string.Join(";", myDict.Select(x => x.Key + "=" + x.Value).ToArray());
.NET 4 이상을 사용하는 경우 최종 ToArray
통화를 생략 할 수 있습니다 .
답변
또 다른 옵션은 Join 대신 Aggregate 확장을 사용하는 것입니다.
String s = myDict.Select(x => x.Key + "=" + x.Value).Aggregate((s1, s2) => s1 + ";" + s2);
답변
Linq가 작동 Dictionary
하려면 최소한 .Net v3.5 및 using System.Linq;
.
일부 대안 :
string myDesiredOutput = string.Join(";", myDict.Select(x => string.Join("=", x.Key, x.Value)));
또는
string myDesiredOutput = string.Join(";", myDict.Select(x => $"{x.Key}={x.Value}"));
어떤 이유로 Linq를 사용할 수 없다면 다음을 사용하십시오 Stringbuilder
.
StringBuilder sb = new StringBuilder();
var isFirst = true;
foreach(var x in myDict)
{
if (isFirst)
{
sb.Append($"{x.Key}={x.Value}");
isFirst = false;
}
else
sb.Append($";{x.Key}={x.Value}");
}
string myDesiredOutput = sb.ToString();
myDesiredOutput :
A=1;B=2;C=3;D=4
답변
var joinedString= string.Join(";", myDict.Select(x => x.Key + "=" + x.Value));