2011-03-23 19 views
8

मैं तार "कार"का प्रयोग सी # Linq एक सरणी

कहा जाता है की एक सरणी है में अशक्त/खाली घटना के पहले सूचकांक वापस जाने के लिए मैं सरणी के पहले सूचकांक या तो अशक्त, या मूल्य है प्राप्त करना चाहते हैं संग्रहीत खाली है। यही वह है जो मुझे अब तक मिला है:

private static string[] Cars; 
Cars = new string[10]; 
var result = Cars.Where(i => i==null || i.Length == 0).First(); 

लेकिन मुझे इस तरह की घटना का पहला INDEX कैसे प्राप्त होगा?

उदाहरण के लिए:

Cars[0] = "Acura"; 

तो सूचकांक सरणी में अगले उपलब्ध स्थान के रूप में 1 लौटना चाहिए।

उत्तर

14

आप इस उद्देश्य के लिए Array.FindIndex विधि का उपयोग कर सकते हैं। एक तत्व है कि स्थिति निर्दिष्ट विधेय द्वारा परिभाषित से मेल खाता है, और पूरे सरणी के भीतर पहली घटना की शून्य आधारित सूचकांक रिटर्न के लिए

खोज करता है।

उदाहरण के लिए: How to get index using LINQ?:

int index = Array.FindIndex(Cars, i => i == null || i.Length == 0); 

एक अधिक सामान्य प्रयोजन विधि है कि किसी भी IEnumerable<T> पर काम करता है के लिए, पर एक नज़र डालें।

+2

यदि ये तार हैं, तो क्यों नहीं! 'String.IsNullOrEmpty (i)' – neontapir

4

आप इसे करने का LINQ रास्ता चाहते हैं, यहाँ यह है:

var nullOrEmptyIndices = 
    Cars 
     .Select((car, index) => new { car, index }) 
     .Where(x => String.IsNullOrEmpty(x.car)) 
     .Select(x => x.index); 

var result = nullOrEmptyIndices.First(); 

हो सकता है कि के रूप में के रूप में Array.FindIndex संक्षिप्त नहीं, लेकिन यह केवल सरणियों के बजाय किसी भी IEnumerable<> पर काम करेंगे। यह भी composable है।

संबंधित मुद्दे