栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

HUAWEI 机试题:运维日志排序

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HUAWEI 机试题:运维日志排序

 Scala 实现

题目描述:

运维工程师采集到某产品线网运行一天产生的日志n条,现需根据日志时间先后顺序对日志进行排序,日志时间格式为H:M:S.N。

H表示小时(0~23)

M表示分钟(0~59)

S表示秒(0~59)

N表示毫秒(0~999)

时间可能并没有补全,也就是说,01:01:01.001也可能表示为1:1:1.1。

输入描述:

第一行输入一个整数n表示日志条数,1<=n<=100000,接下来n行输入n个时间。

输出描述:

按时间升序排序之后的时间,如果有两个时间表示的时间相同,则保持输入顺序。

示例:

输入:

201:41:8.91:1:09.211

输出:

1:1:09.21101:41:8.9

输入:

323:41:08.0231:1:09.21108:01:22.0

输出:

1:1:09.21108:01:22.023:41:08.023

输入:

2

22:41:08.023

22:41:08.23

输出:

22:41:08.023

22:41:08.23

代码:

def main(args: Array[String]): Unit = {

    val scan = new Scanner(System.in)
    // 获取输入日志条数
    val count = scan.nextLine().toInt

    // 存放日志
    var logs = ListBuffer[Tuple3[Integer, String, Integer]]()
    // 获取输入的日志
    for (i <- 1 to count) {
        var str = scan.nextLine()
        logs.append(Tuple3(i, str, getMillisecond(str)))
    }

    // 实现排序
    logs
    .sortWith((o1, o2) => {
        if (!o1._3.equals(o2._3)) {
            o1._3.compareTo(o2._3) < 0 // 按时间升序排序之后的时间
        } else {
            o1._1.compareTo(o2._1) < 0 // 如果有两个时间表示的时间相同,则保持输入顺序
        }
    })
    .foreach(log => println(log._2)) // 输出排序后的结果

}

def getMillisecond(str: String): Int = {
    val time = str.split(":")
    val hour = time(0).toInt * 60 * 60 * 1000
    val minute = time(1).toInt * 60 * 1000
    val second = time(2).split("\.")(0).toInt * 1000
    val millisecond = time(2).split("\.")(1).toInt
    hour + minute + second + millisecond
}

 


❤️ END ❤️
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/705839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号