我创建了一个列表,该列表具有可变值。我想按变量值对该列表进行排序。
我需要通过stBirthday
降序设置订单并添加文本框
stBirthday
值,如 11081990 , 07051993 , 01012001 ,但仍在变化。
string stName = null;
string stSurname = null;
int stBirthday = 0;
ArrayList myList = new ArrayList();
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 5; i++)
myList.Add(stName + stSurname + stBirthDay);
}
private void List_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
textBox1.Text += myList[i];
}
例如列表值;
mylist[0]= "Johnnie" + "Black" + 03041993
mylist[1]= "Gregory" + "Elliott" + 28071997
mylist[2]= "Kristopher" + "Bridges" + 11231998
mylist[3]= "Olive" + "Higgins" + 05122001
我想这样排序
"Gregory" + "Elliott" + 28071997
"Kristopher" + "Bridges" + 11231998
"Olive" + "Higgins" + 05122001
"Johnnie" + "Black" + 03041993
按生日值排序= 28071997> 11231998> 05122001> 03041993
答案 0 :(得分:0)
在排序之前将其转换为日期,然后您将获得预期的结果,当前您正在对一个整数进行排序
答案 1 :(得分:0)
Rufus提供了最好的解决方案。 C#是面向对象的。您可以使用字符串,使用linq-expression和Regex进行排序来实现相同的目的,但这确实很尴尬。订购列表后,您可以执行以下操作:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
var people = new List<Person>();
/* adding people comes here */
// sorting
var orderedPeople = people.OrderByDescending(person =>
person.DateOfBirth);
textBox1.Text = String.Join(" ",
from p in orderedPeople
select p.FirstName+p.LastName+p.DateOfBirth.ToString("ddMMyyyy")
);