2013-04-15 2 views
2

나는 날짜와 문자열이 포함 된 listitem을 가진 arraylist를 보유하고 있습니다. 이 Arraylist를 Date를 기준으로 정렬하고 싶습니다. arraylist 항목에 대해 다음과 같은 의사 코드가 있습니다. 120-M
2013년 5월 1일을 허용 - -
2013년 2월 2일 101-M 허용listitem을 기준으로 arraylist를 정렬하는 방법

ArrayList _arListDAte = new ArrayList(); 
//foreach loop for DAtatable rows 
ListItem lstitem = new ListItem(); 
//here is condition for assigning text to lstitem 
//if condition match 
lstitem.Text = Today.Date() + ' - Allowed' 
//else 
lstitem.Text = Today.Date() + ' - Not allowed' 

listitem.value = datarow[id]+'-M'; 

그래서 결국 내 ArrayList에 데이터
텍스트 값
2013년 11월 4일 아래 포함 - 허용 121-M
8-8-2012 - 허용되지 않음 126-NM

이 arraylist를 오름차순으로 정렬하고 싶습니다.

답변

1

사용자 정의 비교 정의 :

public class DateComparer: IComparer { 

int IComparer.Compare(Object x, Object y) { 
    String a = (x as ListItem).Text; 
    String b = (y as ListItem).Text; 

    DateTime aDate = DateTime.Parse(a.split(null)[0]); 
    DateTime bDate = DateTime.Parse(b.split(null)[0]); 
    return DateTime.Compare(aDate, bDate);   
    } 
} 

을 그리고 코드 후 전화 :

IComparer comp = new DateComparer(); 
arListDAte.Sort(comp); 
0

당신을 ListItem을 사용하는 대신 날짜 시간 멤버가 사용자 정의 클래스를 정의하는 경우는, 간단하게 수업. 이렇게하면 문자열로 저장된 DateTime 값을 처리 할 때 문화권 관련 문제를 피할 수 있습니다.

static void Main() 
{ 
    ArrayList _arListDAte = new ArrayList(); 
    CustomListItem listItem = new CustomListItem(); 
    bool condition = true; 
    DateTime date = new DateTime(2013, 04, 15); 
    if(condition) 
    { 
     listItem.Text = date + " - Allowed"; 
     listItem.Date = date; 
    } 
    else 
    { 
     listItem.Text = date + " - Allowed"; 
     listItem.Date = date; 
    } 
    _arListDAte.Add(listItem); 

    listItem = new CustomListItem(); 
    date = new DateTime(2013, 04, 13); 
    if (condition) 
    { 
     listItem.Text = date + " - Allowed"; 
     listItem.Date = date; 
    } 
    else 
    { 
     listItem.Text = date + " - Allowed"; 
     listItem.Date = date; 
    } 
    _arListDAte.Add(listItem); 

    listItem = new CustomListItem(); 
    date = new DateTime(2013, 04, 18); 
    if (condition) 
    { 
     listItem.Text = date + " - Allowed"; 
     listItem.Date = date; 
    } 
    else 
    { 
     listItem.Text = date + " - Allowed"; 
     listItem.Date = date; 
    } 
    _arListDAte.Add(listItem); 

    _arListDAte.Sort(); 

} 

public class CustomListItem : IComparable 
{ 
    public string Text { get; set; } 
    public string Value { get; set; } 
    public DateTime Date { get; set; } 

    //Sort Ascending Order 
    public int CompareTo(object obj) 
    { 
     CustomListItem customListItem = obj as CustomListItem; 
     if (customListItem != null) 
      return this.Date.CompareTo(customListItem.Date); 
     return 0; 
    } 

    // Uncomment for descending sort 
    //public int CompareTo(object obj) 
    //{ 
    // CustomListItem customListItem = obj as CustomListItem; 
    // if (customListItem != null) 
    //  return customListItem.Date.CompareTo(this.Date); 
    // return 0; 
    //} 
} 
관련 문제