Archiwum

Posts Tagged ‘Regex’

[C#] Najszybsza metoda zliczania linii w stringu

26 lutego 2012 2 Komentarze

Trafiłem dzisiaj na ciekawy artykuł, którego autor testuje szybkość wykonania różnych metod mających na celu zwrócenie ilości linii zawartych w zmiennej typu string.

Użyte zostały m.in. wyrażenia regularne

static Regex r = new Regex("\n", RegexOptions.Multiline);
static long LinesCountRegex(string s)
{
     MatchCollection mc = r.Matches(s);
     return mc.Count;
}

LINQ

static long LinesCountLinq(string s)
{
      return (from ch in s
              where ch == '\n'
              select ch).Count();
}

static long LinesCountLinqCount(string s)
{
       return s.Count(c => (c == '\n'));
}

wskaźniki

unsafe static long LinesCountUnsafePtr(string s)
{
       long lineCount = 1;
       fixed (char* pchar = s)
       {
             char* p = pchar;
             for (; *p != '\0'; p++)
             {
                  if (*p == '\n') lineCount++;
             }
        }
        return lineCount;
}

ale najszybsze rozwiązanie okazało się nie być związane z żadną wyszukaną techniką.

static long LinesCount4(string s)
{
     long count = 0;
     int position = -1;
     while ((position = s.IndexOf('\n', position + 1)) != -1)
     {
         count++;
     }
     return count;
}
Reklamy
Kategorie:Przykłady Tagi: , , , ,