2010-02-28 5 views
11

PHP में मैं ऐसा है कि मैं दोनों कुंजी और उदाहरण के लिए मूल्य की पहुंच है एक foreach पाश का उपयोग कर सकते हैं:सी # foreach पाश

foreach($array as $key => $value) 

मैं निम्नलिखित कोड है:

Regex regex = new Regex(pattern); 
MatchCollection mc = regex.Matches(haystack); 
for (int i = 0; i < mc.Count; i++) 
{ 
    GroupCollection gc = mc[i].Groups; 
    Dictionary<string, string> match = new Dictionary<string, string>(); 
    for (int j = 0; j < gc.Count; j++) 
    { 
     //here 
    } 
    this.matches.Add(i, match); 
} 

//here पर मैं match.add(key, value) करना चाहता हूं लेकिन मुझे यह नहीं पता कि समूह चयन से कुंजी कैसे प्राप्त करें, जो इस मामले में कैप्चरिंग समूह का नाम होना चाहिए। मुझे पता है कि gc["goupName"].Value में मैच का मूल्य शामिल है।

+0

कुंजी कौन सा है, जो मूल्य है? – kennytm

उत्तर

10

नेट में, समूह के नाम Regex उदाहरण के खिलाफ उपलब्ध हैं :

var match = groupNames.ToDictionary(
      groupName => groupName, groupName => gc[groupName].Value); 
3

आप सीधे समूह के नाम तक नहीं पहुंच सकते हैं, आपको रेगेक्स इंस्टेंस (see doc) पर GroupNameFromNumber का उपयोग करना होगा।

// outside all of the loops 
string[] groupNames = regex.GetGroupNames(); 

तो आप इस आधार पर पुनरावृति कर सकते हैं::

Dictionary<string, string> match = new Dictionary<string, string>(); 
foreach(string groupName in groupNames) { 
    match.Add(groupName, gc[groupName].Value); 
} 

या यदि आप LINQ का उपयोग करना चाहते

Regex regex = new Regex(pattern); 
MatchCollection mc = regex.Matches(haystack); 
for (int i = 0; i < mc.Count; i++) 
{ 
    GroupCollection gc = mc[i].Groups; 
    Dictionary<string, string> match = new Dictionary<string, string>(); 
    for (int j = 0; j < gc.Count; j++) 
    { 
     match.Add(regex.GroupNameFromNumber(j), gc[j].Value); 
    } 
    this.matches.Add(i, match); 
} 
4

सी # 3 में, आप इस तरह के संग्रह प्रसंस्करण करने के लिए LINQ का भी उपयोग कर सकते हैं। नियमित अभिव्यक्तियों के साथ काम करने के लिए कक्षाएं केवल गैर-जेनेरिक IEnumerable लागू करती हैं, इसलिए आपको कुछ प्रकार निर्दिष्ट करने की आवश्यकता है, लेकिन यह अभी भी काफी सुरुचिपूर्ण है।

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

Regex regex = new Regex(pattern); 
var q = 
    from Match mci in regex.Matches(haystack) 
    select regex.GetGroupNames().ToDictionary(
    name => name, name => mci.Groups[name].Value); 

तो फिर तुम सिर्फ अपने this.matches लिए परिणाम आवंटित कर सकते हैं।

+0

@ टोमास - निश्चित है कि; अच्छी जगह। –