यह कैसे जांचा जाए कि सूची <T> तत्व में किसी विशेष गुण मान वाला आइटम है या नहीं


113
public class PricePublicModel
{
    public PricePublicModel() { }

    public int PriceGroupID { get; set; }
    public double Size { get; set; }
    public double Size2 { get; set; }
    public int[] PrintType { get; set; }
    public double[] Price { get; set; }
}

List<PricePublicModel> pricePublicList = new List<PricePublicModel>();

यह जांचने के लिए कि तत्व pricePublicListमें कुछ मान शामिल हैं या नहीं। अधिक सटीक होने के लिए, मैं जांच करना चाहता हूं कि क्या मौजूद है pricePublicModel.Size == 200? इसके अलावा, अगर यह तत्व मौजूद है, तो यह कैसे पता चलेगा कि यह कौन सा है?

संपादित करें यदि शब्दकोश इसके लिए अधिक उपयुक्त है तो मैं शब्दकोश का उपयोग कर सकता हूं, लेकिन मुझे यह जानना होगा कि कैसे :)

जवाबों:


186

यदि आपके पास एक सूची है और आप जानना चाहते हैं कि सूची के भीतर कोई तत्व मौजूद है जो किसी दिए गए मानदंड से मेल खाता है, तो आप FindIndexउदाहरण विधि का उपयोग कर सकते हैं । जैसे कि

int index = list.FindIndex(f => f.Bar == 17);

जहाँ f => f.Bar == 17मिलान मापदंड के साथ एक विधेय है।

आपके मामले में आप लिख सकते हैं

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}

1
क्या होगा अगर मुझे उस मूल्य की विशेषता नहीं पता है? उदाहरण के लिए मेरे पास एक सूची आइटम है जो "18.00" प्रदर्शित कर रहा है मुझे नहीं पता कि यह कहां से आ रहा है इसलिए मैं जांचना चाहता हूं कि कौन सी विशेषता है? इसलिए मूल रूप से, और इस उदाहरण के लिए अनुकरणीय रूप से मेरे पास .size या .bar नहीं है जो मैं इसका पता लगाना चाहता
हूं

क्या होगा यदि आइटम मौजूद नहीं है: सूचकांक मूल्य क्या होगा?
बीकेएसपर्जन

8
नोट: यदि तत्व मौजूद नहीं है, findIndexतो वापस आ जाएगा –1। प्रलेखन: msdn.microsoft.com/es-es/library/x1xzf2ca(v=vs.110).aspx
tomloprod

1
@tomloprod यही कारण है कि वह शून्य से अधिक या बराबर एक सूचकांक के लिए जाँच करता है। अगर (सूचकांक> = 0)। इसे भी लिखा जा सकता है जैसे (सूचकांक> -1)।
डैनीसी

127
bool contains = pricePublicList.Any(p => p.Size == 200);

6
यह देखने के लिए कड़ाई से मौजूद है कि क्या कोई मौजूद है।
डैनियल ए। व्हाइट

3
यह वास्तव में सवाल का जवाब नहीं देता है। उन्होंने कहा,how to know which one is it
जॉर्ज जॉनसन

15
शायद उसके सवाल का जवाब न दिया जाए, लेकिन यह सुनिश्चित हो गया कि उसने मेरी मदद की, क्योंकि मुझे यह देखने की ज़रूरत थी कि क्या किसी दिए गए नाम वाली कोई वस्तु मेरे संग्रह में पहले से मौजूद है या नहीं। मुझे एक बेहतर सुधार की उम्मीद थी। कॉन्टेक्ट्स-मेथड - और यह वही है जो यह LINQ-अभिव्यक्ति करता है। धन्यवाद।
इगोर

3
यह शीर्षक में प्रश्न का उत्तर देता है । ओपी अपने विवरण में बताते हैं कि वह वास्तव में वह नहीं चाहते हैं जो उन्होंने कहा था। फिर भी, उनमें से एक है, और हम में से दर्जनों लोग इस सवाल को गूगल के माध्यम से खोज रहे हैं। मुझे लगता है कि यह अधिक महत्वपूर्ण है कि हम उसके शीर्षक प्रश्न का वास्तविक उत्तर पा सकें।
MGOwen

5
किसी को भी इस की कोशिश करता है और .Any () गैर मान्यता प्राप्त है, तो आप जोड़ने की जरूरत है System.Linq उपयोग करते हुए; आपकी फ़ाइल के शीर्ष पर।
MGOwen

32

आप मौजूद का उपयोग कर सकते हैं

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}

13

LINQ का उपयोग करना बहुत आसान है:

var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
    // Element doesn't exist
}

क्या इस स्थिति से मेल खाने वाले तत्व को सीधे संपादित करना संभव है? इसे प्राप्त करने और नई वस्तु में संग्रहीत करने के लिए नहीं, बल्कि सीधे परिवर्तन?
इलिया वेज़ेलिका

जो matchमान लौटाया गया है उसे संशोधित किया जा सकता है (यह वह PricePublicModelवस्तु है जो सूची में था)।
जैकब

आपको एक ऐसी वस्तु को सीधे संशोधित नहीं करना चाहिए जो शून्य हो सकती है। आप हमेशा ऐसा कर सकते हैं: match.Size = 300;या foreach(var item in pricePublicList.Where(p => p.Size == 200)) item.Size = 300;। हालांकि खुद वन-लाइनर के रूप में इसका इस्तेमाल नहीं करेंगे।
एमी वेस्ट

11

आप वास्तव में LINQ की जरूरत नहीं है के लिए इस वजह से List<T>एक विधि है कि वास्तव में करता है कि आप क्या चाहते प्रदान करता है: Find

एक तत्व की खोज करता है जो निर्दिष्ट विधेय द्वारा परिभाषित स्थितियों से मेल खाता है, और पूरे के भीतर पहली घटना देता है List<T>

उदाहरण कोड:

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);

4
var item = pricePublicList.FirstOrDefault(x => x.Size == 200);
if (item != null) {
   // There exists one with size 200 and is stored in item now
}
else {
  // There is no PricePublicModel with size 200
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.