রূপান্তর করুন অভিধান <স্ট্রিং, স্ট্রিং> সেমিকোলনে বিভাজিত স্ট্রিংকে সি # তে


135

দিনটি শুরু করার জন্য একটি সহজ, নীচে দেওয়া 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 টিরও কম আইটেম রয়েছে যা পরামর্শ দেয় যে স্ট্রিংবিল্ডার ওভারকিল করেছেন।

কোন বিকল্প বাস্তবায়ন বেশি সংক্ষিপ্ত / দক্ষ? ফ্রেমওয়ার্কটিতে এমন কোনও বৈশিষ্ট্য রয়েছে যা সাহায্য করবে?

উত্তর:


290
using System.Linq;

string s = string.Join(";", myDict.Select(x => x.Key + "=" + x.Value).ToArray());

(এবং যদি আপনি। নেট 4, বা আরও নতুন ব্যবহার করে থাকেন তবে আপনি চূড়ান্ত ToArrayকলটি বাদ দিতে পারেন ))


নিস :-) যাইহোক, আমি String.Format ব্যবহার করতে চাই ( "{0} = {1}", x.Key, x.Value) পরিবর্তে + অপারেটর
Amittai Shapira

7
@ অমিতাটাই, @ থাই_ড্রো: আপনি পছন্দ করতে পারেন string.Format; আমি k+"="+vএই জাতীয় সহজ কনটেন্টেশন পছন্দ। প্রত্যেকে তাদের নিজস্ব ধারণা ...
লুক

2
মনে রাখবেন যে কল করার ToArray()প্রয়োজন নেই। এটিকে সরিয়ে ফেলার String.Join<String>(String, IEnumerable<String>)পরিবর্তে একটি কল আসে String.Join(String, String[])
ড্যান স্টিভেন্স

8
আপনি যদি সঠিক আউটপুট ফর্ম্যাট সম্পর্কে চিন্তা না করেন তবে আপনি এটি করতে পারেন string.Join(", ", myDict)। এটি আকারে আউটপুট আসবে[A, 1], [B, 2], [C, 3], [D, 4]
পরমান

2
@SRJ খালি নাল .... খালি থেকে ভিন্ন "", অথবা হোয়াইটস্পেস " ", অভিধানে বৈধ চাবি রয়েছে। যদিও ব্যবহার করার পরামর্শ দেওয়া হয়নি, সেগুলি বৈধ মান। মানগুলি ক্যাপচারের জন্য আপনার ContainsKeyযদি কোনও নির্দিষ্ট কী নাম বা ভাষা নির্মানের সমতুল্য প্রয়োজন হয় তবে আপনাকে একটি চেক করতে হবে foreach
গোল্ডবিশপ

39

আরেকটি বিকল্প হ'ল যোগদানের পরিবর্তে সমষ্টি এক্সটেনশনটি ব্যবহার করা:

String s = myDict.Select(x => x.Key + "=" + x.Value).Aggregate((s1, s2) => s1 + ";" + s2);

নিখুঁত লিনক শৈলী!
মেনস্কো

1

লিনকের কাজ করার জন্য Dictionaryআপনার কমপক্ষে নেট নেট 3.৫ এবং প্রয়োজন 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}"));

আপনি যদি কোনও কারণে লিনক ব্যবহার করতে না পারেন তবে ব্যবহার করুন 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

-3
var joinedString= string.Join(";", myDict.Select(x => x.Key + "=" + x.Value));

রেফারেন্স: https://docs.microsoft.com/en-us/dotnet/api/system.string.join?view=netframework-4.8# সিস্টেমে_স্ট্রিং_জাইন__1_স_সি_স_ট্রিং_সিস্টেম_ সংগ্রহ_জেনারিক_আইইনমেন্টেবল _______


@ লুকাকের উপরে এটি একই উত্তর।
রিক

বাবু এটি একই নয়, তোআররে () ব্যবহার করার দরকার নেই। দয়া করে আমার উত্তরকে কমিয়ে দেবেন না।
জয়দীপ শীল

2
এটি একই - ToArray()ফ্রেমওয়ার্কের উচ্চতর সংস্করণগুলি ব্যবহার করার সময় তিনি অপসারণের কথা উল্লেখ করেছিলেন ।
রিক গ্লোভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.