返回列表的“排序”索引?

时间:2012-02-16 15:50:30

标签: haskell

是否有一些Haskell函数可以列出一个列表,比如双打,如下:

[0.5, 0.6, 0.1, 0.7]

并返回一个整数列表,它们按顺序表示项目的索引。在上述情况下,它将是:

[2, 0, 1, 3]

注意:我想要实现的是一些函数(让我们称之为consistent),它可以比较两个双精度列表,并告诉用户列表的相对排序是否一致:

> consistent [1.0, 2.0, 3.0] [2.1 3.5 4.6]
True
> consistent [1.0, 2.0, 3.0] [3.0, 2.0, 1.0]
False

2 个答案:

答案 0 :(得分:2)

您可以使用[0..]压缩列表,将每个项目与其索引配对。然后,您可以对该列表进行排序,并使用map来获取每对(索引)的第二个元素。

答案 1 :(得分:0)

我认为你也可以这样做:

swap (a, b) = (b, a)

consistent a b = sort (zip a b) == map swap $ sort (zip b a)

我从来没有在Haskell中认真编码,所以语法只是在几个月前阅读“了解自己是一个Haskell ...”之后与我记忆中的相似之处。