फ़ोरैच के बिना किसी सूची में किसी आइटम पर शर्त की जाँच करना


मैं फ़ोरैच का उपयोग किए बिना किसी सूची में किसी आइटम पर किसी शर्त की जांच कैसे कर सकता हूं। उदाहरण के लिए, ऐसा करने के बजाय:

सी#
foreach(string[] item in mylist)
{
  if(Convert.ToBoolean(item[0]){}
}

मैं सीधे अपनी सूची के आइटम तक पहुंच सकता हूं। इसे कैसे प्राप्त किया जा सकता है?

धन्यवाद!

समाधान 4

सबसे पहले, ऐसा कोई तरीका नहीं है जिससे आप सूची में पहला आइटम ढूंढ सकें जो किसी शर्त से मेल खाता हो, या, सभी किसी सूची में आइटम जो किसी शर्त के बिना मेल खाते हैं यात्रा: Linq का उपयोग आपके लिए इसे “स्वचालित” कर देगा।

यहां आपके लिए स्पष्ट करने का प्रश्न यह है कि वास्तव में क्या है तुम्हें चाहिए स्ट्रिंग्स की सूची के आपके पुनरावृत्ति से लौटाया गया:

1. सूची में अनुक्रमितों की एक सूची जहां बूल मानों में परिवर्तनीय स्ट्रिंग हैं?

2. या, किसी सूची में बूलियन मानों का एक समूह: अनुक्रमणिका के बिना, इसके उपयोग की कल्पना करना कठिन है।

3. या, प्रत्येक स्ट्रिंग के लिए कुछ कार्रवाई करें (कुछ कोड निष्पादित करें) जिसे बूलियन मान और/या स्ट्रिंग्स की सूची में उस मान के सूचकांक के आधार पर बूल में परिवर्तित किया जा सकता है? इम्हो, एक अधिक प्रशंसनीय उपयोग-मामला।

4. आपको और क्या स्पष्ट करने की आवश्यकता है, इसके लिए ऊपर अपनी पोस्ट पर मेरी टिप्पणी देखें

मैं आपको यहां स्ट्रिंग्स की सूची को एक डिक्शनरी के रूप में वापस करने का एक उदाहरण दिखाऊंगा … जहां ‘कुंजी सूची में बूलियन मान का सूचकांक है, और मान परिवर्तित बूलियन मान है।

सी#
// required
using System.Linq

// assume the data source here is a simple List<string>
List<string> strList = new List<string>
{
    "True", "what", "False", "True", "ozone", "False"
};

// this variable must be initialized to be used in the Linq shown here
bool booltest = false;

Dictionary<int,bool> dctIntBool = strList
.Select((str, index) => new {index, str})
.Where(pair => Boolean.TryParse(pair.str, out booltest))
.ToDictionary(pair => pair.index, pair => booltest);

लिंक ‘सेलेक्ट’ की भिन्नता पर ध्यान दें जो संग्रह के एक सूचकांक को बनाता/संरक्षित करता है जिसे वह पुनरावृत्त करता है, यहां उपयोग किया जाता है: सूचकांक/मान की प्रत्येक जोड़ी को एक नई अनाम संरचना में प्रक्षेपित किया जाता है; फिर, व्हेयर लिंक स्टेटमेंट उन “जोड़ियों” को फ़िल्टर करता है, इसलिए कोई भी जोड़ी जहां स्ट्रिंग ‘बूल’ में परिवर्तनीय नहीं है, खारिज कर दी जाती है; अंत में, Linq ToDictionary का उपयोग डिक्शनरी संरचना बनाने के लिए किया जाता है, प्रत्येक KeyValuePair के मान के लिए, व्हेयर क्लॉज में ‘TryParse स्टेटमेंट’ द्वारा ‘बूल्टेस्ट’ को निर्दिष्ट बूलियन मान का उपयोग किया जाता है।

समाधान 2

यदि आप किसी संग्रह पर पुनरावृति करना चाहते हैं, और इसका उपयोग नहीं करना चाहते हैं foreach लूप, आपके पास a से अधिक विकल्प नहीं हैं for कुंडली। इस तरह (मुझे लगता है mylist एक IList):

सी#
int count = mylist.Count;
string[] result; // This assumes you have an IList<string[]>
for (int i = 0; i < count; i++)
{
   result = mylist[i];
   bool value = Convert.ToBoolean(result[0]);
}

मैं इसका कारण नहीं समझ पा रहा हूं कि आप बूलियन प्राप्त करने के लिए स्ट्रिंग-सरणी की सूची के साथ क्यों काम कर रहे हैं। जाहिर तौर पर बेहतर/स्वच्छ कार्यान्वयन होना चाहिए।

उम्मीद है ये मदद करेगा। आपको कामयाबी मिले।

समाधान 3

यदि आपका मतलब यह है List<T>आप इस्तेमाल कर सकते हैं सूची.सम्मिलित विधि[^].

सी#
List<string> mylist = new List<string>(){"cat","dog","bird"};

var result = mylist.Contains("bird");
Console.WriteLine("A list {0} 'bird' word", result==true ? "contains" : "does not contain");

समाधान 5

चमत्कार जैसी कोई चीज़ नहीं होती. यदि आप बिना लूप के किसी विधि का उपयोग करते हैं, तो इसका मतलब है कि हुड के पीछे कुछ लूप का उपयोग किया जाता है। लेकिन अक्सर ऐसे तरीकों का उपयोग करना बिल्कुल सही होता है। विशेष रूप से, सामान्य विधि देखें System.Array.ForEach<>:

[^].

-एसए

समाधान 6

आप लैम्ब्डा फ़ंक्शन का उपयोग कर सकते हैं, जो अज्ञात तरीकों को बेहतर बनाने जैसा है, जिससे स्थिति को पढ़ना आसान हो जाता है:

bool exists = myList.Any(x => Convert.ToBoolean(x) == true);
if (exists) {
    // Do something
}

コメント

タイトルとURLをコピーしました