2013-04-15 26 views
2

我有一個包含日期和一些字符串的listitem的arraylist。我想在Date的基礎上對這個Arraylist進行排序。 我有以下僞代碼arraylist項目。如何在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日 - 允許120-M
2013年5月1日 - 允許101-M
2013年2月2日 - 允許121-M
8-8-2012 - 不允許126-NM

我想按日期按升序對此列表進行排序。

回答

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

它變得更簡單,如果你定義有一個DateTime成員自定義類,而不是使用列表項的類。這可以避免在處理保存爲字符串的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; 
    //} 
} 
相關問題