-1

By any chance someone knows how I can sort this collection [2,5,3,4] from smallest to largest using |> custom operators

infix operator |>
var array = [2,5,3,4]
func |> (a: Int , b:(Int)->Int)->Int{
       return b(a)
}

I carry this but honestly I have no idea how to order the collection from smallest to largest using custom operators, could someone help me please I would really appreciate it

4

1 回答 1

0

我有点不清楚问题是什么;你是说我们可以自由地定义|>自己,还是这部分问题是我们必须忍受的?

infix operator |>
func |> (a: Int , b: (Int) -> Int) -> Int {
    return b(a)
}

如果是后者,我想我们会坚持下去,所以我会说,忽略数组并考虑|>运算符 ( b) 的函数参数仅采用一个 Int 的事实。这真的很奇怪,因为它到底是如何被用来对任何东西进行排序的,因为排序需要比较两个Int?接受一个 Int 并返回一个 Int 的函数有什么好处?

显然,为了涉及两个 Int,这个函数需要“内置”另一个 Int,大概是通过它作为闭包的能力。显而易见的方法是通过以其他 Int 作为参数开始的某个其他函数的结果生成该函数,以便它可以被生成的函数捕获。

例如:

func smallerWith(_ this:Int) -> (Int) -> (Int) {
    { (other:Int) in min(this,other) }
}

smallerWith现在是一个函数,它生成所需类型的函数,执行所需的比较,以给出对中较小的那个。例如:

let test = 1 |> smallerWith(2) // 1
let test2 = 10 |> smallerWith(9) // 9

现在想想你将如何使用它(也许与数组的sorted函数)来执行实际的排序。(留给读者作为练习。)

于 2021-03-06T00:55:57.970 回答