您可以通過LINQ做到這一點:
// I'm assuming here that "LastCheckin" is defined as List<List<string>> or similar
// ...
var sorted = Data.LastCheckin.OrderBy(list => list[1]);
這將返回一個IEnumerable<List<string>>
含在子列表(值2)第二個值整理你的「名單」。
如果要排序的位置列表中,您可以使用List<T>.Sort
代替:
Data.LastCheckin.Sort((a,b) => a[1].CompareTo(b[1]));
如果需要指定,在運行時,上升或decending,一個簡單的方法來處理,這是:
bool ascending = true; // Set to false for decending
int mult = ascending ? 1 : -1;
Data.LastCheckin.Sort((a,b) => mult * a[1].CompareTo(b[1]));
爲了處理更復雜的檢查,你可以分割你的拉姆達萬畝以上多行:
bool ascending = true; // Set to false for decending
string myDateFormat = GetDateFormat(); // Specify date format
int mult = ascending ? 1 : -1;
Data.LastCheckin.Sort((aStr,bStr) =>
{
DateTime a, b;
bool aSuccess = DateTime.TryParseExact(aStr[1], myDateFormat, DateTimeStyles.None, CultureInfo.InvariantCulture, out a);
bool bSuccess = DateTime.TryParseExact(bStr[1], myDateFormat, DateTimeStyles.None, CultureInfo.InvariantCulture, out b);
int result;
if (!aSuccess)
result = bSuccess ? -1 : 0;
else if (!bSuccess)
result = 1;
else
result = a.CompareTo(b);
return mult * result;
});
這會處理a和b上的解析器故障,並應將它們放在排序的末尾。
我怎麼可能保持Data.LastCheckin的數據,而不將其放入排序?或者,如何訪問已排序的內容並將其放回到Data.LastCheckin中? – sooprise 2010-06-23 17:40:16
@Soo:我只是添加了一個就地排序,通過列表 .Sort。它應該做你以後的事情。 –
2010-06-23 17:41:07
如何指定升序或降序? – sooprise 2010-06-23 17:42:39