gpt4 book ai didi

algorithm - 比较列表的元素并根据 Scala 中的逻辑创建 [键值对或映射]

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:38 25 4
gpt4 key购买 nike

我有一个包含以下数据的列表。我必须比较列表的元素并创建具有指定条件的 map 。 SFTP.csv 应该与其他元素一样映射到/dev/sftp/SFTP_schema.json。

List[String] = List(
"/dev/sftp/SFTP.csv" ,
"/dev/sftp/test_schema.json" ,
"/dev/sftp/SFTP_schema.json",
"/dev/sftp/test.csv"
)

我有一个很大的集合,什么是最快的方法?

最佳答案

那么,您基本上想要反转 map.flatMap{ case (k, v) => List(k, v)) }?看起来很有趣……这个怎么样?:

val input = List(
"/dev/sftp/SFTP.csv" ,
"/dev/sftp/test_schema.json" ,
"/dev/sftp/SFTP_schema.json",
"/dev/sftp/test.csv"
)

val res = input.
groupBy(s => s.
split("/").
last.
replaceAll("\\.csv","").
replaceAll("_schema\\.json","")
).
map {
case (k, v1 :: v2 :: Nil) =>
if (v1.endsWith("csv")) (v1, v2)
else (v2, v1)
case sthElse => throw new Error(
"Invalid combination of csv & schema.json: " + sthElse
)
}

println(res)

产生:

// Map(
// /dev/sftp/SFTP.csv -> /dev/sftp/SFTP_schema.json,
// /dev/sftp/test.csv -> /dev/sftp/test_schema.json
// )

作为方法:

def invertFlatMapToUnionKeyValue(input: List[String]): Map[String, String] = {
input.
groupBy(s => s.split("/").last.
replaceAll("\\.csv","").
replaceAll("_schema\\.json",""
)).
map {
case (k, v1 :: v2 :: Nil) =>
if (v1.endsWith("csv")) (v1, v2)
else (v2, v1)
case sthElse => throw new Error(
"Invalid combination of csv & schema.json: " + sthElse
)
}
}

关于algorithm - 比较列表的元素并根据 Scala 中的逻辑创建 [键值对或映射],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49035957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com