Scala:用最后一个非空值填充列表中的空白

2023-11-30

我有一个类似的列表:

val arr = Array("a", "", "", "b", "c", "")

我正在寻找一种方法来创建:

Array("a", "a", "a", "b", "c", "c")

您可以尝试使用折叠,简单(易于理解)的方法是向左折叠:

(Array.empty[String] /: arr) {
    case (prev, "") => prev :+ prev.lastOption.getOrElse("");
    case (prev, l) => prev :+ l
}

> res01: Array[String] = Array(a, a, a, b, c, c)

这通过附加之前的内容构建了一个新数组arr元素或结果列表的最后一个,具体取决于源元素是否为空字符串。

您也可以将其写为:

(Array.empty[String] /: arr) {
    case (Array(), l) => Array(l)
    case (prev, "") => prev :+ prev.last;
    case (prev, l) => prev :+ l
}

可以通过使用列表和前置来优化它:

{(List.empty[String] /: arr) {
    case (Nil, l) => l::Nil
    case (h::tail, "") => h::h::tail;
    case (prev, l) => l::prev
} reverse } toArray

如果您不喜欢左折叠和右折叠方法的符号版本。这里有它的文本标识符:

arr.foldLeft(Array.empty[String]) {
    case (prev, "") => prev :+ prev.lastOption.getOrElse("");
    case (prev, l) => prev :+ l
}

arr.foldLeft(List.empty[String]) {
    case (Nil, l) => l::Nil
    case (h::tail, "") => h::h::tail;
    case (prev, l) => l::prev
}.reverse toArray

它的方法和实现完全相同,但名称不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala:用最后一个非空值填充列表中的空白 的相关文章

随机推荐

  • Python:防止模块导入时混合制表符/空格

    我知道你可以通过调用Python来确保纯制表符 空格代码 tt 但是 当我无法控制顶级调用时 我仍然可以在脚本加载的模块上强制执行此行为吗 如果您可以控制初始脚本 那么您可以自己添加检查 例如 您可以使用一个函数来首先检查模块是否存在缩进错
  • 如何从 Apple iPhone 拍摄的图像中读取 EXIF 数据

    如何从使用相机拍摄的图像中读取 EXIF 数据苹果手机使用 C 我需要GPS相关数据 PS 我知道如何读取 EXIF 除了用苹果手机 我建议你看一下书外图书馆Google Code 项目及其相关项目 NET 的 Exif 库关于代码项目的文
  • 使用 pip 和 virtualenv 逐步设置 python?

    有没有关于设置 Mac 使用 python pip 和 virtualenv 设置的好的分步教程 下载并安装Python 2 7 1 Mac OS X 64 位 32 位 x86 64 i386 安装程序 适用于 Mac OS X 10 6
  • 安装 SQL Server 2014 Express 作为引导程序的先决条件

    我正在尝试使用 boostrapper Wix 3 11 来设置安装 并以 SQL Server 2014 Express 作为先决条件 我安装的时候效果很好setup exe or SQLEXPR x64 ENU exe用命令行 命令行如
  • 闪亮 - 如何禁用仪表板标题

    我是闪亮的新手 当我制作项目时 我需要在服务器端隐藏仪表板标题 在shinydashboard网站上 我找到了代码dashboardHeader disable TRUE 我尝试过这个 但没有用 不过 我尝试使用shinyjs来解决这个问题
  • C# MediaPlayer.MediaEnded 事件未触发

    我有一小段 C 代码 Creates a MediaPlayer with the sound you want to play public static void PlaySound Stream wavStream string wa
  • 查找 id 以公共字符串开头的所有元素

    我有一个 XSL 它创建了多个 id 为 createdOn 的元素加上 unique id Example createdOnid0xfff5db30 我想使用 JavaScript 查找这些内容并将其存储在变量中 我试过了 var da
  • 有没有办法在不创建类实例的情况下获取类实例属性?

    这是我的第一个问题的链接 从字典创建类实例 所以我试图从字典创建类实例 该实例包含类没有的键 例如 class MyClass object def init self value1 value2 self attr1 value1 sel
  • excel:比较日期的vba类型不匹配

    我试图对两个日期 在不同列中 的年份和当前年份日期进行比较 如果年份相同 则应在相应行的第 13 列写入单词 ATUAL 如果年份不同 则不应写入任何内容 这是我到目前为止所尝试过的 Sub CopyColumn2 Dim i As Lon
  • dexguard 的实现

    我已将 com saikoa dexguard eclipse adt jar 文件放入 eclipse 的 dropin 文件夹中 并修改了 android 项目中的 Proguard Project 和 Project Properti
  • docker extra_host 参数需要主机名的字典值,如何使用变量?

    在 ansible playbook 中 docker 参数 extra host 包含两部分 主机 ip address 我试图将主机和 IP 地址作为变量传递 它们来自提示变量 我的主机文件中的最终结果是 1 2 3 4 server
  • 解析数据库授权 - 用户对象的安全性

    我有一个 ASP NET MVC 4 Web 应用程序 我在后端使用 Parse 作为数据库 https www parse com 和 C 作为编程语言 我使用 ParseUser 类来登录注册用户 https www parse com
  • 逆透视 Excel 矩阵/数据透视表?

    有没有一种快速的方法来 取消透视 Excel 矩阵 数据透视表 在 Excel 或其他地方 无需编写宏或其他代码 同样 我可以自己编写代码 C 或 VBA 或其他 来执行此操作 我想知道是否可以做到without代码 快点 例如 我需要转换
  • fopen 用于写入但不独占

    我想用fopen file w 打开文件进行写入但不独占 IE 我想让另一个进程在文件仍然打开时读取该文件 请注意 我在每行之后都会进行同花 这样我就不会错过任何内容 当其他进程从文件读取时 写入将处于空闲状态 该文档没有提到排他性 但实验
  • 检测到 CallbackOnCollectedDelegate

    当我的代码运行 5 10 分钟后 我不断收到此错误 检测到 CallbackOnCollectedDelegate 消息 对 CashRecyclerTestapp MessageMonitor NativeMethods WndProc
  • 尝试对自定义 JavaScript 对象进行排序

    我不太擅长 JS 但到目前为止还幸存下来 我正在创建一个复杂的 JS 对象并想要对其进行排序 该对象的结构如下所示 cart attributes Attribute Value 我正在创建一个独特的属性 它告诉我由冒号任意分隔的 3 件事
  • Ubuntu Python“没有名为 paramiko 的模块”

    所以我尝试在 Ubuntu 上使用 Python 2 7 使用 Paramiko 但是 import paramiko 会导致此错误 Traceback most recent call last File
  • 在excel vba中使用数组或字典作为sql中的from子句

    是否可以使用数组或字典作为 SQL 语句中的表 例如 strSQL SELECT FROM myArray 提前致谢 扩展 Nathan Sav 提供的想法 以下代码应该 Dim a 3 As String a 0 1 as C1 a 1
  • 在 Git 中仅提交文件的部分更改

    当我在 Git 中更改文件时 如何才能仅提交部分更改 例如 如何仅提交文件中已更改的 30 行中的 15 行 您可以使用 git add patch
  • Scala:用最后一个非空值填充列表中的空白

    我有一个类似的列表 val arr Array a b c 我正在寻找一种方法来创建 Array a a a b c c 您可以尝试使用折叠 简单 易于理解 的方法是向左折叠 Array empty String arr case prev