डेव बिष्ट का जवाब अच्छा है और ठीक से काम करता है।
यह ध्यान देने योग्य है, हालांकि जगह है कि Cast<Match>()के साथ OfType<Match>()इच्छा तेज़ी लाएं।
कोड बन गया:
var arr = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
.OfType<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
परिणाम बिल्कुल वैसा ही है (और ओपी के मुद्दे को ठीक उसी तरह से संबोधित करता है) लेकिन विशाल तार के लिए यह तेज है।
टेस्ट कोड:
static void Test()
{
Stopwatch sw = new Stopwatch();
StringBuilder sb = new StringBuilder();
string strText = "this will become a very long string after my code has done appending it to the stringbuilder ";
Enumerable.Range(1, 100000).ToList().ForEach(i => sb.Append(strText));
strText = sb.ToString();
sw.Start();
var arr = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
.OfType<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
sw.Stop();
Console.WriteLine("OfType: " + sw.ElapsedMilliseconds.ToString());
sw.Reset();
sw.Start();
var arr2 = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
.Cast<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
sw.Stop();
Console.WriteLine("Cast: " + sw.ElapsedMilliseconds.ToString());
}
आउटपुट निम्नानुसार है:
OfType: 6540
Cast: 8743
के लिए बहुत लंबा तार कास्ट () इसलिए धीमी है।
OfType<Match>()इसके बजाय इसका उपयोग किया होगाCast<Match>()... फिर, परिणाम एक ही होगा।