मान लीजिए मेरे पास पायथन में निम्न कोड था (हां, यह प्रश्न सी # के बारे में है यह सिर्फ एक उदाहरण है)

string = "{entry1} {entry2} this is a string"
dictionary = {"entry1": "foo", "entry2": "bar"}

print(string.format(**dictionary))

# output is "foo bar this is just a string"

इस स्ट्रिंग में, यह .format() का उपयोग करके {entry1} और {entry2} को स्ट्रिंग से फू और बार में बदल देगा।

क्या वैसे भी मैं निम्नलिखित कोड की तरह इस सटीक चीज़ को सी # (और घुंघराले ब्रेसिज़ को भी हटा सकता हूं) में दोहरा सकता हूं:

string str1 = "{entry1} {entry2} this a string";
Dictionary<string, string> dict1 = new() {
    {"entry1", "foo"},
    {"entry2", "bar"}
};

// how would I format this string using the given dict and get the same output?
1
prokenz101 15 जिंदा 2022, 19:27

4 जवाब

स्ट्रिंग इंटरपोलेशन का उपयोग करके आप निम्न कार्य कर सकते हैं:

    Dictionary<string, string> dict1 = new() {
    {"entry1", "foo"},
    {"entry2", "bar"}
    };
    string result = $"{dict1["entry1"]} {dict1["entry2"]} this is a string";
1
Prasad Telkikar 15 जिंदा 2022, 20:14

आप रेगुलर एक्सप्रेशन की सहायता से {...} में मानों को बदल सकते हैं:

  using System.Text.RegularExpressions;

  ...

  string str1 = "{entry1} {entry2} this a string";

  Dictionary<string, string> dict1 = new() {
    { "entry1", "foo" },
    { "entry2", "bar" }
  };

  string result = Regex.Replace(str1, @"{([^}]+)}", 
      m => dict1.TryGetValue(m.Groups[1].Value, out var v) ? v : "???");

  // Let's have a look:
  Console.Write(result);

परिणाम:

  foo bar this a string
1
Dmitry Bychenko 15 जिंदा 2022, 20:26

आप एक विस्तार विधि लिख सकते हैं एक शब्दकोश के लिए और इसमें अपनी आवश्यकता के अनुसार अपनी स्ट्रिंग में हेरफेर करें जैसे

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;


public static class DictionaryExtensions
{
    public static string ReplaceKeyInString(this Dictionary<string, string> dictionary, string inputString)
    {

        var regex = new Regex("{(.*?)}");
        var matches = regex.Matches(inputString);
        foreach (Match match in matches)
        {
            var valueWithoutBrackets = match.Groups[1].Value;
            var valueWithBrackets = match.Value;

            if(dictionary.ContainsKey(valueWithoutBrackets))
                inputString = inputString.Replace(valueWithBrackets, dictionary[valueWithoutBrackets]);
        }

        return inputString;
    }
}

अब दिए गए स्ट्रिंग को अपेक्षित स्ट्रिंग में बदलने के लिए इस एक्सटेंशन विधि का उपयोग करें,

string input = "{entry1} {entry2} this is a string";
Dictionary<string, string> dictionary = new Dictionary<string, string> 
{ 
  { "entry1", "foo" }, 
  { "entry2", "bar" } 
};

var result = dictionary.ReplaceKeyInString(input);
Console.WriteLine(result);

RegEx लॉजिक क्रेडिट @Fabian Bigler को जाता है। यहाँ फैबियन का उत्तर है:

घुंघराले ब्रेसिज़ सी # के बीच मान प्राप्त करें


ऑनलाइन कोशिश करें

1
Prasad Telkikar 15 जिंदा 2022, 21:00

ये कोशिश करें

foreach (var d in dict) str1=str1.Replace("{"+d.Key+"}",d.Value);

या यदि आप एक्सटेंशन पसंद करते हैं

    Console.WriteLine(str1.FormatFromDictionary(dict));
    
public  static string FormatFromDictionary(this string str, Dictionary<string, string> dict)
{
        foreach (var d in dict) str = str.Replace("{" + d.Key + "}", d.Value);
        return str;
}

यदि एक स्ट्रिंग में बदलने के लिए आइटम हैं तो आप एक स्ट्रिंग बिल्डर का उपयोग कर सकते हैं

public  static string FormatFromDictionary(this string str, Dictionary<string, string> dict)
{
        StringBuilder sb = new StringBuilder(str, 100);
        foreach (var d in dict) sb.Replace("{" + d.Key + "}", d.Value);
        return sb.ToString();
}
0
Serge 15 जिंदा 2022, 21:37