[C#] C #에서 Dictionary <string, string>을 세미콜론으로 구분 된 문자열로 변환

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.5using 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


답변


답변