public void SortData() { int choice; while (true) { try { Console.WriteLine("1. 이름 오름차순 | 2. 이름 내림차순 | 3. 전화번호 오름차순 | 4. 전화번호 내림차순"); Console.Write("선택 >> "); if (int.TryParse(Console.ReadLine(), out choice)) { if (choice < 1 || choice > 4) { throw new MenuChoiceException(choice); //Console.WriteLine("1~4 까지의 숫자만 입력해주세요."); //return; } else { break; } } } catch (MenuChoiceException err) { err.ShowWrongChoice(); } } PhoneInfo[] new_arr = new PhoneInfo[curCnt]; // 배열복제는 다 해야하니 밖으로 뺴서 한번만 Array.Copy(infoStorage, new_arr, curCnt); if (choice == 1) { Array.Sort(new_arr); //인포스토리지를 바로 줘버리면 원본이 바뀌어버리니 카피떠서 해야함 그래서 카피한 배열을 줌 //내가 만든 배열이기 때문에 컴파일러가 정렬할 기준을 몰라 내가 기준도 정해줘야함 } else if (choice == 2) { Array.Sort(new_arr); Array.Reverse(new_arr); //reverse만하면 오름차순으로 정렬한 배열에 내림차순 완성 } else if (choice == 3) { Array.Sort(new_arr, new PhoneComparator()); // new PhoneComparator() 객체하나 만들어서 넘겨주면됨 } else if (choice == 4) { Array.Sort(new_arr, new PhoneComparator()); Array.Reverse(new_arr); } for (int i = 0; i < curCnt; i++) // 출력도 마지막에 한번만 하면 되니 따로 뺴고 { new_arr[i].ShowPhoneInfo(); Console.WriteLine(); } }
public int CompareTo(object obj) { PhoneInfo other = (PhoneInfo)obj; //인자가 obj기 때문에 obj를 바꿀 클래스타입으로 형변환 해주고 인스턴스를 생성 //if (this.name.CompareTo(other.name) == 1) //문자열은 크다작다 연산자가 없음, 앞에게 더크면 1 // return 1; //else if (this.name.CompareTo(other.name) == -1) // return -1; //else // return 0; return(this.name.CompareTo(other.name)); // 한줄 }
public int Compare(object x, object y) { PhoneInfo first = (PhoneInfo)x; PhoneInfo other = (PhoneInfo)y; //if (this.name.CompareTo(other.name) == 1) //문자열은 크다작다 연산자가 없음, 앞에게 더크면 1 // return 1; //else if (this.name.CompareTo(other.name) == -1) // return -1; //else // return 0; return(first.Phone.CompareTo(other.Phone)); // 한줄 }
public void InputData() { Console.WriteLine("1.일반 2.대학 3.회사"); Console.Write("선택 >> "); int choice; while (true) { if (int.TryParse(Console.ReadLine(), out choice)) { break; } } if (choice < 1 || choice > 3) { Console.WriteLine("1.일반 2.대학 3.회사 중에 선택하십시오."); return; } PhoneInfo info = null; switch (choice) { case 1: info = InputFriendInfo(); break; case 2: info = InputUnivInfo(); break; case 3: info = InputCompanyInfo(); break; } if (info != null) { infoStorage[curCnt++] = info; Console.WriteLine("데이터 입력이 완료되었습니다"); } }