list - 在列表中向上移动项目

标签 list f#

如何在列表中向上移动项目。
输入列表如下所示:let list = [1;2;3;4;5]
输出列表将类似于以下内容之一:
[1;2;3;5;4]
.......>

[2;1;3;4;5]
...>......

情节扭曲:我希望能够向上移动列表中的任何索引

据我了解,这不是您打算使用 F# 或函数式语言做的事情,但它是我的程序中必须具备的。
我相信这可以使用递归和高阶(HO)函数来完成,但由于我对 HO 的了解非常有限,我尝试使用递归来解决这个问题。

我在列表中向下移动项目的方法包括使用索引和列表作为参数的简单递归,如下所示:

let rec moveDownAt index list =
    match index, list with
    | -1, _ -> list
    | 0, h1::h2::t -> h2::h1::t
    | index, h::t -> h::moveDownAt (index - 1) t
    | _, [] -> list

但是,要朝另一个方向移动,我需要引用之前的“头”,并且我认为我在第三条匹配线上会遇到问题| index, h::t -> h::moveDownAt (index - 1) t 我执行 h::的地方,因为我将头添加到列表中(如果我添加该参数,这将是下一个调用的前一个) )。

最佳答案

在两个元素上交换位置意味着一个元素向上移动,一个元素向下移动。
简单使用以下代码即可解决问题:

let moveUpAt index list = moveDownAt (index-1) list

这将取代索引,使“要向下移动的索引”变成“要向上移动的索引”。

关于list - 在列表中向上移动项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093465/

相关文章:

python - 创建一个 python 集合/唯一列表

python - 如何在 Python 的列表中获取字符串的位置?

list - 如何从包含Dart中列表的 map 列表中访问值?

java - Java中printf期间分离列表元素

f# - F# : (/) 中的重载运算符

c# - 如何使用 F# Interactive 以交互方式测试 C# 函数

具有委托(delegate)类型字段的 F# Marshall 结构

f# - 如何将浮点值写入 f# 中的文件

Python从文本文件中删除标点符号

.net - 为什么默认情况下文字不是 const ?