You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于三个等长Array[String]创建List[resource]实例列表

解决方案:Scala中从三个等长数组生成Resource列表

这事儿在Scala里用集合的函数式操作就能轻松搞定,完全不用手动遍历索引写重复代码~

首先,我们可以利用Scala集合的zipped方法,它能把三个等长的集合按索引一一配对,然后通过map来生成对应的Resource实例。

基础实现(假设所有count字符串都能转成Int)

先看最直接的写法,假设你的三个数组和样例类已经定义好:

// 示例输入数组
val val1: Array[String] = Array("server-1", "server-2", "db-cluster")
val val2: Array[String] = Array("2", "5", "1")
val val3: Array[String] = Array("us-west-2", "eu-central-1", "ap-northeast-1")

// 你的样例类(建议首字母大写,符合Scala命名惯例)
case class Resource(name: String, count: Int, location: String)

// 生成目标列表
val newList: List[Resource] = (val1, val2, val3).zipped.map { (name, countStr, location) =>
  Resource(name, countStr.toInt, location)
}.toList

解释一下:

  • (val1, val2, val3).zipped会把三个数组的同索引元素打包成三元组,比如第一个元素是(val1(0), val2(0), val3(0))
  • map遍历每个三元组,把count字符串转成Int后,创建Resource对象
  • 最后调用toList把Array转换成你需要的List类型

进阶:处理可能的Int转换异常

如果val2里的字符串有可能无法转成Int(比如空串、非数字字符),可以用toIntOption来安全处理,过滤掉无效的元素:

val newList: List[Resource] = (val1, val2, val3).zipped.flatMap { (name, countStr, location) =>
  // 尝试转换,成功则生成Resource,失败则返回None(会被flatMap过滤)
  countStr.toIntOption.map(Resource(name, _, location))
}.toList

这样如果某个count字符串转换失败,对应的元素就不会出现在最终的List里,避免抛出运行时异常。

替代写法(用zip嵌套)

如果你习惯分步zip,也可以先把前两个数组zip,再和第三个数组zip,写法如下:

val newList: List[Resource] = val1.zip(val2).zip(val3).map {
  case ((name, countStr), location) => Resource(name, countStr.toInt, location)
}.toList

不过这种写法不如zipped直观,推荐优先用zipped的方式。

内容的提问来源于stack exchange,提问作者rangeelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:20:47