带有DateTime的KeyValuePair作为未被排序的键

时间:2016-12-22 07:13:05

标签: c# sorting datetime collections

我必须使用以下格式包含日志文件:

测试场景通过:名称:Scenario_48_12 / 19/2016 1:30:42 AM,测试结果:True

我需要这样的数据1:30,真实的一天::

var result = new List<KeyValuePair<DateTime, string>>();
var commaSeperatedTimeStamp = string.Empty;

  foreach (string file in System.IO.Directory.GetFiles(logsPath, "ApplicationLogs*", System.IO.SearchOption.AllDirectories))
        {
            var perLineText = File.ReadAllText(file).Split('\n');
            foreach (var item in perLineText)
            {
                if (item.Contains("Scenario"))
                {
                    var timeStamp = DateTime.ParseExact(item.Split(',')[0].Split('/').Last().Substring(4).Trim(), "h:mm:ss tt", CultureInfo.InvariantCulture);
                    result.Add(new KeyValuePair<DateTime, string>(timeStamp, 
                                                                item.ToLower().Contains("true") 
                                                                              ? "true" 
                                                                              : "false"));
                }
            }
        }

        result.OrderBy(x => x.Key.TimeOfDay);
        return result;

结果变量未排序。

此代码存在多个问题

1:日志文件的时间格式为hh:mm:ss但是当我将其转换为DateTime时,它会将当前日期值添加到其中。我不想要的。

  1. 我希望日志数据按时间排序(如果我也可以摒弃秒数,那就更好了)。但是当我使用OrderBy值时没有进行排序。
  2. 请建议。

3 个答案:

答案 0 :(得分:0)

  1. 答案
  2. OrderBy返回类型IOrderedEnumarable,因此您需要将其转换为列表

    this.$timeout(function () {
        let image_id = '#image_id';
        let height = $(image_id).height();
        console.log(height);
     },0);
    
    1. 答案
    2. 仅在行文本中计算数据 正则表达式测试链接:http://rubular.com/r/0pYoiOCvto

      result = result.OrderBy(x => x.Key.TimeOfDay).ToList();
      

答案 1 :(得分:0)

在您尝试使用子字符串4的代码中实际存在,因此您将在凌晨1:30:42获得,因此您获取当前日期时间与我们添加的时间一样。

将您的代码更改为:

//这将给出日志中给出的实际日期时间,然后按

进行排序
  var actual = perLineText.Split(',')[0].Split('_').Last().ToString();

   var timeStamp = DateTime.ParseExact(actual, "MM/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

//reassign result 
     result = result.OrderBy(x => x.Key.TimeOfDay);
      return result;

我做了命令,我得到了结果。

另请注意,即使日期不同,您的订单也会按时间排序。如果你希望按日期和时间正确地排序列表,你应该通过key itslef命令。

答案 2 :(得分:0)

我使用排序代替OrderBy

result.Sort((a, b) => a.Key.CompareTo(b.Key));

确切的原因我还在试图找出来,也会发布。