首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串格式与数组/列表相结合?

如何将字符串格式与数组/列表相结合?
EN

Stack Overflow用户
提问于 2021-01-01 14:19:50
回答 2查看 99关注 0票数 1

我有一些集合,比如长度未知的List或Array of Int,每个集合都是一位或两位数,并希望以4的宽度打印,例如:

代码语言:javascript
复制
  a   b   c
 11   9  12
  7  12   1

我希望有这样的东西:

代码语言:javascript
复制
List("a", "b", "c").mkString(s"%3s ")
val li = List(11, 9, 12) 
li.mkString(s"%3d ")

但是没有,至少在我找的地方没有。

有一个优雅的解决方案吗?我可以使用foldLeft吗?不知何故,我不明白:

代码语言:javascript
复制
(0 to 2).foldLeft("")((sofar, idx) => sofar + s"%3d${li(idx)} ")

导致无法打印的"%3d11 %3d9 %3d12 "

对于3个元素,文字格式设置很容易

代码语言:javascript
复制
printf (s"%3d %3d %3d", li(0), li(1), li(2))
 11   9  12

但是对于更多的元素,特别是对于未知数量的元素,我该如何优雅地解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-01 14:33:23

mkString之前将每个元素转换为所需格式的String

代码语言:javascript
复制
Seq(23,5,111,7).map(n => f"$n%4d").mkString
//res0: String = "  23   5 111   7"

或者,您可以构造一个单一格式的String,然后对集合执行format()操作。

代码语言:javascript
复制
val nums = Array(1, 22, 3, 444)
("%4d" * nums.length).format(nums:_*)
//res1: String = "   1  22   3 444"
票数 3
EN

Stack Overflow用户

发布于 2021-01-04 20:25:23

你有更多的选择,基于伟大的How to convert an Int to a String of a given length with leading zeros to align?

代码语言:javascript
复制
Seq(11, 9, 12).map(n => "%4d".format(n)).mkString

或者:

代码语言:javascript
复制
Seq(11, 9, 12).map(_.toString.reverse.padTo(4, ' ').reverse).mkString

或者使用foldLeft

代码语言:javascript
复制
Seq(11, 9, 12).foldLeft("")((soFar, i) => soFar + "%4d".format(i))

Scastie上运行的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65527668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档