C # строка заказа - PullRequest
       2

C # строка заказа

2 голосов
/ 25 ноября 2011

Как определить, какая строка перед другой, если она упорядочена в алфавитном порядке?

Примеры:

is "add" before "ask"? true
is "aaaabba" before "aaac"? true
is "xeon" before "alphabet"? false

Есть ли в .NET что-то, что может это сделать?Или кто-то знает хороший метод для этого?Заранее спасибо.Я использую C #, но другой язык подходит для примеров, или даже псевдокод, или идея, спасибо.

Ответы [ 7 ]

18 голосов
/ 25 ноября 2011

Вы можете использовать статический метод Compare или CompareTo метод экземпляра:

class Program
{
    static void Main()
    {
        Console.WriteLine(string.Compare("add", "ask") < 0);
        Console.WriteLine(string.Compare("aaaabba", "aaac") < 0);
        Console.WriteLine(string.Compare("xeon", "alphabet") < 0);
    }
}

Отпечатки:

True
True
False
4 голосов
/ 25 ноября 2011

Катион при сравнении строк с учетом культурных особенностей!

  String s1 = "Strasse";
  String s2 = "Straße";

  var res = String.Compare(s1, s2, StringComparison.Ordinal) == 0; // returns false

  CultureInfo ci = new CultureInfo("de-DE");
  eq = String.Compare(s1, s2, true, ci) == 0; // returns true
2 голосов
/ 25 ноября 2011

Использовать строку. Метод сравнения

    static void Main(string[] args)
    {

        Console.WriteLine(
            "is 'add' before 'ask'? {0}", 
            string.Compare("add", "ask") < 0
            );
        Console.WriteLine(
            "is 'aaaabba' before 'aaac'? {0}",
            string.Compare("aaaabba", "aaac") < 0
            );
        Console.WriteLine(
            "is 'xeon' before 'alphabet'? {0}", 
            string.Compare("xeon", "alphabet") < 0
            );

        Console.ReadLine();
    }
0 голосов
/ 25 ноября 2011

Если вы используете какой-либо контейнер, то вы можете проверить значение индекса, чтобы проверить, является ли он индексом раньше или нет:

if( Array.IndexOf(strArray, "C") < Array.IndexOf(strArray, "C") ) return true;

Поскольку вы знаете, что он упорядочен в соответствии с alphabet, тогда вы можетеиспользуйте String.Compare Method (String, String)

retun  string.Compare(string1, string2) < 0 ? true : false

Для сравнения используется current culture для получения информации о культуре, такой как casing rules and the alphabetic order of individual characters.Например, культура может указывать, что определенные комбинации символов должны обрабатываться как один символ, или символы верхнего и нижнего регистра должны сравниваться определенным образом, или что порядок сортировки символа зависит от символов, предшествующих или следующих за ним.

При сравнении строк вы должны вызвать метод Compare, который requires that you explicitly specify the type of string comparison that the method uses.Для получения дополнительной информации см. Рекомендации по использованию строк в .NET Framework.

0 голосов
/ 25 ноября 2011

string.Compare - это функция, которую вы ищете.

Если результат больше 0, то первый аргумент больше второго. Если он ниже 0, то это второй. Если функция возвращает 0, тогда оба аргумента равны.

0 голосов
/ 25 ноября 2011

Вы можете просто использовать

int result = String.Compare(stringa, stringb);

Если результат> 0, тогда stringa будет перед строкой b, <0 stringb перед строкой и 0, если они одинаковы. </p>

0 голосов
/ 25 ноября 2011

Используйте StringComparer класс http://msdn.microsoft.com/en-us/library/system.stringcomparer.aspx

...