c# - जांचें कि सूची में तत्व है जिसमें स्ट्रिंग है और वह तत्व प्राप्त करें




.net linq (6)

इस प्रश्न का उत्तर खोजते समय, मैंने LINQ का उपयोग करने वाले समान लोगों में भाग लिया है, लेकिन मैं उन्हें पूरी तरह से समझने में सक्षम नहीं हूं (और इस प्रकार, उन्हें लागू करें), क्योंकि मुझे इससे परिचित नहीं है। मैं मूल रूप से क्या करना चाहता हूं, यह है:

  1. जांचें कि किसी सूची के किसी भी तत्व में एक विशिष्ट स्ट्रिंग है या नहीं।
  2. अगर ऐसा होता है, तो उस तत्व को प्राप्त करें।

मैं ईमानदारी से नहीं जानता कि मैं ऐसा करने के बारे में कैसे जाऊंगा। मैं इसके साथ क्या कर सकता हूं यह है (निश्चित रूप से काम नहीं कर रहा है):

if (myList.Contains(myString))
    string element = myList.ElementAt(myList.IndexOf(myString));

मुझे पता है कि यह क्यों काम नहीं करता है:

  • myList.Contains() true वापस नहीं आता true , क्योंकि यह जांच करेगा कि सूची का एक संपूर्ण तत्व मैंने निर्दिष्ट स्ट्रिंग से मेल खाता है या नहीं।
  • myList.IndexOf() को कोई घटना नहीं मिलेगी, क्योंकि, यह फिर से मामला है, यह स्ट्रिंग से मेल खाने वाले तत्व की जांच करेगा।

फिर भी, मुझे इस समस्या को हल करने का कोई संकेत नहीं है, लेकिन मुझे लगता है कि मुझे LINQ का उपयोग करना होगा जैसा कि मेरे समान प्रश्नों में सुझाया गया है। ऐसा कहा जा रहा है, अगर यह मामला है, तो मैं उत्तरदाता को उनके उदाहरण में LINQ के उपयोग की व्याख्या करना चाहता हूं (जैसा कि मैंने कहा था, मैंने सी # के साथ अपने समय में इससे परेशान नहीं किया है)। अग्रिम लोगों (और gals?) में धन्यवाद।

संपादित करें: मैं एक समाधान के साथ आया हूँ; सूची के माध्यम से बस लूप करें, जांचें कि वर्तमान तत्व में स्ट्रिंग है या फिर वर्तमान तत्व के बराबर एक स्ट्रिंग सेट करें। मैं सोच रहा हूं, हालांकि, इससे कहीं अधिक कुशल तरीका है?

string myString = "bla";
string element = "";

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(myString))
        element = myList[i];
}

आप उपयोग कर सकते हैं

var match=myList.Where(item=>item.Contains("Required String"));
foreach(var i in match)
{
//do something with the matched items
}

LINQ आपको डेटा के किसी संग्रह को "क्वेरी" करने की क्षमताओं के साथ प्रदान करता है। आप संग्रह पर डेटाबेस क्वेरी (चयन, कहां, आदि) जैसे सिंटैक्स का उपयोग कर सकते हैं (यहां स्ट्रिंग्स का संग्रह (सूची))।

तो आप ऐसा कर रहे हैं जैसे "मुझे सूची से आइटम प्राप्त करें जहां यह किसी दिए गए शर्त को पूरा करता है"

जहां आप "लैम्ब्डा अभिव्यक्ति" का उपयोग कर रहे हैं

संक्षेप में बम्बडा अभिव्यक्ति को बताने के लिए कुछ है (इनपुट पैरामीटर => वापसी मूल्य)

इसलिए पैरामीटर "आइटम" के लिए, यह "आइटम" प्राप्त करता है। ("आवश्यक स्ट्रिंग") "। इसलिए यदि आइटम में स्ट्रिंग है और यह स्थिति से संतुष्ट होने के बाद से यह सूची से चुना जाता है तो यह सच हो जाता है।


आप लिंक की FirstOrDefault एक्सटेंशन विधि का उपयोग कर सकते हैं:

string element = myList.FirstOrDefault(s => s.Contains(myString));

यह उस मुट्ठी तत्व को वापस कर देगा जिसमें सबस्ट्रिंग myString , या null यदि कोई ऐसा तत्व नहीं मिला है।

यदि आपको केवल इंडेक्स की आवश्यकता है, तो List<T> कक्षा की खोज FindIndex विधि का उपयोग करें:

int index = myList.FindIndex(s => s.Contains(myString));

यह मुट्ठी तत्व की अनुक्रमणिका को वापस कर देगा जिसमें सबस्ट्रिंग myString , या -1 यदि कोई ऐसा तत्व नहीं मिला है।


इसे सरल उपयोग करने के लिए;

foreach(string item in myList)//Iterate through each item.
{
 if(item.Contains("Search Term")//True if the item contains search pattern.
 {
   return item;//Return the matched item.
 }
}

वैकल्पिक रूप से, लूप के साथ ऐसा करने के लिए, इसका उपयोग करें;

    for (int iterator = 0; iterator < myList.Count; iterator++)
    {
        if (myList[iterator].Contains("String Pattern"))
        {
            return myList[iterator];
        }
    }

मूल उत्तर यह है कि आपको लूप के माध्यम से पुनरावृत्त करने की आवश्यकता है और किसी भी तत्व को निर्दिष्ट स्ट्रिंग को जांचने की आवश्यकता है। तो, आइए कोड कहें

foreach(string item in myList)
{
  if(item.Contains(myString))
       return item;
}

समकक्ष लेकिन terse कोड है

mylist.Where(x => x.Contains(myString)).FirstOrDefault();

यहां, एक्स पैरामीटर है जो उपरोक्त कोड में आइटम की तरह कार्य करता है।


यहां कई अच्छे उत्तर हैं, लेकिन मैं अस्तित्व का उपयोग कर नीचे एक सरल एक का उपयोग करता हूं

foreach (var setting in FullList)
  {
    if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName)) 
       setting.IsActive = true; // do you business logic here 
     else
       setting.IsActive = false;
    updateList.Add(setting);
  }

for (int i = 0; i < myList.Length; i++)
{
    if (myList[i].Contains(myString)) // (you use the word "contains". either equals or indexof might be appropriate)
    {
        return i;
    }
}

पुराने फैशन loops लगभग हमेशा सबसे तेज़ हैं।







contains