Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't sort array: "Ambiguous reference to member '<'"

extension Array where Element: Numeric {
    func closest(to givenValue: Element) -> Element {
        let sorted = self.sorted(by: <)

        let over = sorted.first(where: { $0 >= givenValue })!
        let under = sorted.last(where: { $0 <= givenValue })!

        let diffOver = over - givenValue
        let diffUnder = givenValue - under

        return (diffOver < diffUnder) ? over : under
    }
}

In line 3 of this example code, Xcode gives me the incomprehensible error message Ambiguous reference to member '<', along with this great list:

list of like a dozen "Found this candidate" entries

What am I supposed to do here? I just want this array to get sorted.

like image 673
Peter W. Avatar asked Aug 11 '26 17:08

Peter W.


2 Answers

You have to declare Element to be Comparable:

extension Array where Element: Numeric & Comparable {
like image 140
emlai Avatar answered Aug 14 '26 11:08

emlai


In

let sorted = self.sorted(by: <)

you're not giving a boolean function for the function to use. Maybe try replacing it with :

let sorted = self.sorted(by: { $0 < $1 })
like image 34
shikai ng Avatar answered Aug 14 '26 11:08

shikai ng



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!