【问题标题】:C# Sort items in List<ArrayList> by DateTimeC# 按日期时间对 List<ArrayList> 中的项目进行排序
【发布时间】:2018-02-12 03:32:02
【问题描述】:

我有一个 arraylist List&lt;ArrayList&gt; hallDetailsList 列表,我正在尝试按时间对它们进行排序

列出数据

hallDetailsList:
[0][0]Movie A|4:10pm|Hall 1
[0][1]Movie A |6:50pm|Hall 1
[0][2]Movie A |9:30pm|Hall 1
[0][3]Movie A |12:10am|Hall 1
[1][0]Movie B|4:40pm|Hall 2
[1][1]Movie B|9:40pm|Hall 2
[1][2]Movie B|12:10am|Hall 2
[1][3]Movie B|7:10pm|Hall 2
[1][4]Movie B|12:00pm|Hall 2
[1][5]Movie B|2:40pm|Hall 2
[1][6]Movie B|8:30pm|Hall 2
[2][0]Movie B|1:00pm|Hall 3
[2][1]Movie C|3:10pm|Hall 3
[2][2]Movie C|9:20pm|Hall 3
[2][3]Movie C|11:30pm|Hall 3
[2][4]Movie C|5:20pm|Hall 3
[2][5]Movie C|7:20pm|Hall 3
[3][0]Movie C|1:00pm|Hall 4
[3][1]Movie C|3:00pm|Hall 4
[3][2]Movie D|3:40pm|Hall 4
[3][3]Movie D|6:30pm|Hall 4
[3][4]Movie D|9:20pm|Hall 4
[3][5]Movie D|12:15am|Hall 4
[3][6]Movie D|5:30pm|Hall 4
[3][7]Movie D|12:30pm|Hall 4

我设法通过大厅对数据进行分类,因为以前它们只是到处乱七八糟。我如何通过时间对物品进行分类?就像现在在一些数组列表中一样,时间搞砸了

【问题讨论】:

  • 仅供参考 您的项目中没有日期时间,只有时间。只是说...
  • 是的,我将日期时间转换为时间。对不起,我没有说明
  • 那么,这是一个对象数组还是只是一个字符串数组
  • 这样的? hallDetailsList[0].Sort( (x,y) =&gt; DateTime.Compare(x.Split('|')[1], y.Split('|')[1] ) ) 唯一的问题是您需要将时间字符串转换回 DateTime 才能使用 DateTime.Compare
  • Enumerable.OrderBy 可能是@Minijack 想要的:msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx 它确实需要一个 Func 作为参数。

标签: c# list arraylist


【解决方案1】:

鉴于此

List<ArrayList> hallDetailsList = new List<ArrayList>()
   {
      new ArrayList()
         {
            0,
            0,
            "Movie A",
            "1:10pm",
            "Hall 1"
         },
      new ArrayList()
         {
            0,
            0,
            "Movie A",
            "4:10pm",
            "Hall 1"
         },
      new ArrayList()
         {
            0,
            0,
            "Movie A",
            "3:10pm",
            "Hall 1"
         }

   };

您可以这样订购

var results = hallDetailsList.OrderBy(item => DateTime.ParseExact(((string)item[3]), "h:mmtt", null, System.Globalization.DateTimeStyles.None))
                             .ToList();

或者稍微可读性更强

var Result= hallDetailsList.OrderBy(item =>
              {
                  var time = (string)item[3];
                  return DateTime.ParseExact(time, "h:mmtt", null, System.Globalization.DateTimeStyles.None);
              }).ToList();

注意:根据您的实际ArrayList,您可能需要更改索引

var time = (string)item[3]; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多