2015-10-02 2 views
1

Я создаю приложение консоли C#, которое заменяет дефис для нулей, чтобы завершить максимальную длину моей строки с идентификационной карты «123456 -72 ", и мне приходится сталкиваться с трудностями, когда приходится сортировать в моем массиве.Как получить первые или первые две цифры из «12345-678» с помощью подстроки C# Консоль

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

Этот пример работает нормально, но только для первого символа. Мне нужно Пример:

class IdentificationNumber { 

    private string IDNumber; 
    private int Customertype; 
    private string check; 
    private string pad; 
    private string longFormat; 

    SortedList GroupID = new SortedList(); 

    public IdentificationNumber(string IDNumber) { 
     this.IDNumber= IDNumber; 
    } 

    public string getLongFormat() { 
     var ReplaceHyp = IDNumber.Replace("-", ""); 
     int Customertype= Int32.Parse(IDNumber.Substring(0,2)); 

     //Array 
     //GroupID .Add(1,"Blue"); 
     //GroupID .Add(2,"Blue"); 
     GroupID .Add(38,"White"); 
     GroupID .Add(39,"Blue"); 

     pad=""; 
     check = GroupID.GetByIndex(GroupID.IndexOfKey(Customertype)).ToString(); 
     Console.WriteLine(Customertype); 
     Console.WriteLine(check); 

     switch (check) { 
      case("White"): 
       longFormat= ReplaceHyp.Substring(0,6)+pad.PadLeft((14 -ReplaceHyp.Length),'0')+ReplaceHyp.Substring(6,(ReplaceHyp.Length-6)); 
       break; 

      case("Blue"): 
       longFormat= ReplaceHyp.Substring(0,7)+pad.PadLeft((14 -ReplaceHyp.Length),'0')+ReplaceHyp.Substring(7,(ReplaceHyp.Length-7)); 
       break; 
     } 

     return longFormat; 
    } 
} 

Любое решение или предложение?

+0

Чтобы сделать вид, пожалуйста [обратитесь к этому вопросу] (https://stackoverflow.com/questions/3389903/custom-sorting-of-a-string-array-in-c-sharp); Я не могу ответить на ваш вопрос дальше, не зная, например, почему вы иногда используете одного персонажа и другие два раза. Для пользовательского 'SortedList' вам нужно использовать конструктор' SortedList (IComparer) '. –

+0

@ KenY-N. Поскольку у меня есть два типа учетной записи в одном случае, я заменяю Hyphen и добавляет нули из: 7-й позиции (0,6) «Белый», а в других руках с 8-й позиции (0,7) «Синий» Спасибо за просьбу – Fmanin

ответ

1

Вот скелет метода сравнения может понадобиться:

public static int CompareStrings(string s1, string s2) 
{ 
    int Customertype1 = Int32.Parse(s1.Substring(0,2)); 
    int Customertype2 = Int32.Parse(s2.Substring(0,2)); 

    string check1 = GroupID.GetByIndex(GroupID.IndexOfKey(Customertype1)).ToString(); 
    string check2 = GroupID.GetByIndex(GroupID.IndexOfKey(Customertype2)).ToString(); 

    if (Customertype1 > Customertype2) 
     return 1; 
    if (Customertype1 < Customertype2) 
     return -1; 
    else 
    { 
     var ReplaceHyp1 = s1.Replace("-", ""); 
     switch (check1) { 
      case("White"): 
       longFormat1 = ReplaceHyp1.Substring(0,6)+pad.PadLeft((14 -ReplaceHyp1.Length),'0')+ReplaceHyp1.Substring(6,(ReplaceHyp1.Length-6)); 
       break; 

      case("Blue"): 
       longFormat1 = ReplaceHyp1.Substring(0,7)+pad.PadLeft((14 -ReplaceHyp1.Length),'0')+ReplaceHyp1.Substring(7,(ReplaceHyp1.Length-7)); 
       break; 
     } 
     var ReplaceHyp2 = s2.Replace("-", ""); 
     switch (check2) { 
      case("White"): 
       longFormat2 = ReplaceHyp2.Substring(0,6)+pad.PadLeft((14 -ReplaceHyp2.Length),'0')+ReplaceHyp2.Substring(6,(ReplaceHyp2.Length-6)); 
       break; 

      case("Blue"): 
       longFormat2 = ReplaceHyp2.Substring(0,7)+pad.PadLeft((14 -ReplaceHyp2.Length),'0')+ReplaceHyp2.Substring(7,(ReplaceHyp2.Length-7)); 
       break; 
     } 
     return stringCompare(longFormat1, longFormat2); 
    } 
} 

Этот код плохо должен быть переработан! В зависимости от ваших конкретных потребностей, я думаю, что проверки Customertype1/2 могут быть удалены.

+0

Спасибо, что спал мой день !. @Ken Y-N. Отличное решение! .. – Fmanin