如何执行以下场景:
我有一些包含例如以下行的DataTable:
1.rowa 2.rowab 3.row 4.rowaba ... n. rowabba
如何按长度而不是名称对行进行排序。我想通过字段长度对表进行排序。
1.rowa 2.rowab 3.row 4.rowaba ... n. rowabba
如何按长度而不是名称对行进行排序。我想通过字段长度对表进行排序。
你可以向你的DataTable
中添加一个额外的列,提供一个包含调用len()
函数的表达式,从而导致该列的值被自动计算:
table.Columns.Add("LengthOfName", typeof(int), "len(Name)");
然后,您可以在将DataTable
绑定到您计划使用的任何类型的UI控件之前,对您的新列进行排序:
table.DefaultView.Sort = "LengthOfName";
DataTable
,您可以为排序引入一个额外的列。在这种情况下,您可以将该列中的值简单地设置为每个所需单元格的长度,然后按新列进行排序: DataTable table = new DataTable();
DataColumn val = table.Columns.Add("Value", typeof(string));
table.Rows.Add("abc");
table.Rows.Add("defgh");
table.Rows.Add("i");
table.Rows.Add("jklm");
// sort logic: ***** schou-rode's "len(...)" approach is better *****
DataColumn sort = table.Columns.Add("Sort", typeof(int));
foreach (DataRow row in table.Rows) {
row[sort] = ((string)row[val]).Length;
}
DataView view = new DataView(table);
view.Sort = "Sort";
foreach (DataRowView row in view) {
Console.WriteLine(row.Row[val]);
}
个人而言,我会使用一个带类型的列表 - 要么是一个类,要么是一个字符串(因为你只列出了一个值):
List<string> list = new List<string> {
"abc", "defgh", "i", "jklm"};
list.Sort((x, y) => x.Length.CompareTo(y.Length));
foreach (string s in list) {
Console.WriteLine(s);
}