Есть ли функция, которая сравнивает длины строк соответственно в C # (.NET)? - PullRequest
2 голосов
/ 05 апреля 2009

Извините, я не знал, что длина вычисляется во время строительства !!

Я получил 200 символов длинной строки A, 5 символов длинной строки B Если я сделаю

 int Al = A.length;
 int Bl = B.length;

и сравните - все выглядит нормально, НО, если я сделаю это несколько миллионов раз посчитайте что-то, это слишком дорого для того, что мне нужно.

Гораздо более простым и аккуратным способом была бы некоторая функция, которая может сравнивать две строки и сообщать мне, когда другая ПОЛНОСТЬЮ совпадает с другой. Что-то вроде (compare_string_lengths (stringA, stringB) -> где строка B должна быть как минимум такой же длины (символы), как строка A, чтобы возвращать TRUE для функции.

Да, Я знаю, что функция не имела бы никакого представления о том, какая строка короче, но если длины двух строк будут учитываться параллельно, поэтому, когда одна превышает другую, функция знает, что «ответить».

Спасибо за любые подсказки.

Ответы [ 2 ]

9 голосов
/ 05 апреля 2009

Если вам нужно только узнать, отличаются ли строки по длине (или если вы хотите проверить, равны ли длины перед сравнением), я не думаю, что вы можете сделать это быстрее, чем сравнение свойства Length. Извлечение длины из строки является операцией O (1).

Чтобы действительно сравнить строки, вам нужно посмотреть на каждый символ, что делает его операцией O (n).

Edit:

Если все идет слишком медленно, вы должны попытаться посмотреть в профилировщике, какие самые медленные части? Возможно, на создание ваших струн уходит время?

1 голос
/ 05 апреля 2009

Есть несколько вещей дешевле, чем сравнение длины двух строк.

Если вы хотите найти строку в списке строк, используйте Hashtable, например:

    var x = new System.Collections.Generic.Dictionary<string, bool>();
    x.Add("string", true);
    if (x.ContainsKey("string"))
        Console.WriteLine("Found string.");

Это удивительно быстро.

...