Scala 插入列表中的特定位置

2024-06-24

这是我确实解决的问题,但是作为一个完全命令式的 Scala 菜鸟,我觉得我发现了一些完全不优雅的东西。任何改进的想法表示赞赏。

val l1 = 4 :: 1 :: 2 :: 3 :: 4 :: Nil // original list
val insert = List(88,99) // list I want to insert on certain places

// method that finds all indexes of a particular element in a particular list
def indexesOf(element:Any, inList:List[Any]) = {
        var indexes = List[Int]()
        for(i <- 0 until inList.length) {
                if(inList(i) == element) indexes = indexes :+ i
        }
        indexes
}


var indexes = indexesOf(4, l1) // get indexes where 4 appears in the original list

println(indexes)

var result = List[Any]()

// iterate through indexes and insert in front
for(i <- 0 until indexes.length) {
        var prev = if(i == 0) 0 else indexes(i-1)
        result = result ::: l1.slice(prev, indexes(i)) ::: insert
}
result = result ::: l1.drop(indexes.last) // append the last bit from original list

println(result)

我认为通过这样的事情可以实现更优雅的解决方案,但这只是纯粹的猜测。

var final:List[Any] = (0 /: indexes) {(final, i) => final ::: ins ::: l1.slice(i, indexes(i))

def insert[A](xs: List[A], extra: List[A])(p: A => Boolean) = {
  xs.map(x => if (p(x)) extra ::: List(x) else List(x)).flatten
}

scala> insert(List(4,1,2,3,4),List(88,99)){_ == 4}
res3: List[Int] = List(88, 99, 4, 1, 2, 3, 88, 99, 4)

编辑:添加了解释。

我们的目标是插入一个列表(称为extra)位于另一个列表中选定元素的前面(此处称为xs--常用于列表,就好像一件事是x那么 much 一定是复数xs)。我们希望它适用于我们可能拥有的任何类型的列表,因此我们使用通用类型对其进行注释[A].

哪些元素是插入的候选元素?在编写函数时,我们不知道,因此我们提供一个函数来表示每个元素的 true 或 false (p: A => Boolean).

现在,对于列表中的每个元素x,我们检查——我们是否应该进行插入(即是p(x)真的)?如果是,我们就构建它:extra ::: List(x)只是以下的元素extra接下来是单个项目x。 (最好写成extra :+ x--在最后添加单个项目。)如果没有,我们只有单个项目,但我们会制作它List(x)而不仅仅是x因为我们希望所有东西都具有相同的类型。所以现在,如果我们有类似的东西

4 1 2 3 4

我们的条件是插入5 6 before 4,我们生成

List(5 6 4) List(1) List(2) List(3) List(5 6 4)

这正是我们想要的,只不过我们有一个列表列表。为了摆脱内部列表并将所有内容扁平化为一个列表,我们只需调用flatten.

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

Scala 插入列表中的特定位置 的相关文章

随机推荐

  • 有一个更好的方法吗? VBA脚本

    我这里有一份供料泵的跟踪清单 我们必须考虑库存水平 所以我做了这个 当您将泵输入表中时 什么也没有发生 当您将患者姓名放在上面时 该行会变成粉红色 表明该泵已离开我们的库存 我试图将一个脚本 宏放在一起 可以计算我们仍然拥有的泵 即白色行
  • SlickGrid - 默认情况下控件可见的可编辑网格

    SlickGrid 支持单元格编辑器 可以将其配置为单击或双击时显示 但是 我没有看到编辑器默认对所有单元格可见的选项 而无需单击 双击单元格 是否可以在编辑器所在的光滑网格中支持编辑器 所有单元默认为 init 有已知的解决方法吗 谢谢
  • 如何从 kivy 小部件画布中删除特定指令?

    我正在编写一个基于 kivy 的图形应用程序 我可以在其中动态地将节点添加到绘图区域 然后用有向线 边缘 连接它们 节点可以在绘图区域内拖动 并且边缘应始终与它们保持连接 Edge 类派生自 Widget 类 它的图形表示由两部分组成 线本
  • 2个选择器,2个不同的事件,相同的功能

    我正在使用 jQuery 1 7 需要将相同的函数绑定到 2 个不同选择器上的 2 个不同实时事件 例如 function do something this do something with this alert test input
  • 字体在 Android Studio 预览中更改,但在模拟器/设备中未更改

    我正在尝试更改文本视图 复选框 按钮和 android support design widget TextInputLayout 的默认字体 为了清楚地说明 我设置了 android fontFamily gt cursive 它似乎在
  • 有没有办法保护 python 中的内置函数?

    我的问题源于这个问题 https stackoverflow com questions 6828722 python set to list 其中用户因不知不觉地重新绑定内置全局而感到困惑set 当您尝试覆盖内置函数时 有没有一种简单的方
  • 回发后 JavaScript 不工作 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在 asp net Web 应用程序上使用引导组件 它工作正常 但奇怪的是 它们在页面回发后停止工作 外表很好 但行为却不好 这就
  • 检查语言模型的困惑度

    我使用 Keras LSTM 创建了一个语言模型 现在我想评估它是否良好 因此我想计算困惑度 在 Python 中计算模型的困惑度的最佳方法是什么 我已经提出了两个版本并附上了相应的来源 请随时查看链接 def perplexity raw
  • 在 Express Route api 中添加命名参数

    我有一条快速路线 如下所示 app get api v1 username option function req res do stuff 如何修改此路由 以便 URL 显示选项的参数名称 option 例如 http localhost
  • James Gosling 对 Java 字节为何有符号的解释

    最初我对 Java 决定指定这一点感到惊讶byte是有符号的 范围是 128 127 包括的 我的印象是大多数 8 位数字表示形式都是无符号的 范围为0 255相反 例如IPv4 点十进制表示法 http en wikipedia org
  • Lamport 的 Paxos 中的矛盾做了简单的论文

    阶段 2 a 如果提议者收到大多数接受者对其准备请求 编号为 n 的响应 则它向每个接受者发送一个接受请求 以获取编号为 n 且值为 v 的提案 其中 v 是响应中编号最高的提案的值 或者如果响应未报告任何提案 则为任意值 正如论文中提到的
  • 重载方法值与替代方法的聚合

    我有以下函数 但无法编译 private def save pea KStream String String Unit pea groupByKey aggregate gt folder String String value Stri
  • 多行TextView的wrap_content宽度

    我有一个 TextView 宽度和高度都设置为 wrap content max lines 设置为 2 当文本适合一行时 一切都可以完美运行 但是当它换行到第二行时 TextView 的宽度变得尽可能大 它填充父容器 所以 我想要的是 S
  • 如何用 cin 分配 char 指针?

    所以基本上当我尝试这样做时 char inputFileName cout lt lt Filename cin gt gt inputFileName 它允许我输入文件名 但是当我按 Enter 时 我收到未处理的异常错误 有任何想法吗
  • Android API 19 上的 Bitmap.CompressFormat.WEBP alpha 通道变黑

    我编写了一个从 Web 检索图像 JPEG PNG 等 的服务 然后将其以 webp 格式保存到磁盘 我使用以下代码保存图像 try FileOutputStream fos new FileOutputStream imgFile bit
  • 从 PHP 字符串中提取城市和邮政编码

    我需要 PHP 中的一种快速通用方法来从输入字符串中提取城市和邮政编码 如果可用 信息 该字符串可以是以下形式 input str 123 Main Street 纽黑文 康涅狄格州 input str 123 Main Street 纽黑
  • 突出显示字符串中的单词(如果包含关键字)

    如果包含关键字 如何编写包含整个单词的脚本 example 关键字 fun 字符串 这只鸟很有趣 结果 这只鸟 有趣 我做以下事情 str my bird is funny keyword fun str preg replace keyw
  • VK API,社区墙上的帖子访问被拒绝,WALL 权限失败

    我为我的 VK 社区上的帖子构建 API 但我检查了我的应用程序的权限 并且我拥有所有权限 但没有加载 WALL 权限 在 OAuth 的范围中 我放置了所有范围 而不是在 WALL 上工作 我检查 Api console 他们有 访问墙
  • 当我使用 ArrayList 时,如何阻止 GWT 尝试包含每个可序列化的类

    我在 GWT 中有一个 RPC 服务 需要返回一个列表 该列表可以填充各种类型的对象 所有这些对象都是可序列化的 并且所有这些对象都在我的服务中的其他地方引用 因此它们应该可用于 GWT RPC 但是 除非我使用泛型类型参数 例如Array
  • Scala 插入列表中的特定位置

    这是我确实解决的问题 但是作为一个完全命令式的 Scala 菜鸟 我觉得我发现了一些完全不优雅的东西 任何改进的想法表示赞赏 val l1 4 1 2 3 4 Nil original list val insert List 88 99