skip to Main Content

Using the code from this answer to find the closest value in an array: https://stackoverflow.com/a/62159057

func closestMatch(values: [Int64], inputValue: Int64) -> Int64? {
   return (values.reduce(values[0]) { abs($0-inputValue) < abs($1-inputValue) ? $0 : $1 })
}

How can I get the index of the item that matches closest instead of its value?

2

Answers


  1. Chosen as BEST ANSWER

    Solved it with firstIndex. Not super elegant but it works.

    func closestMatch(values: [Int], inputValue: Int) -> Int? {
        let match = values.reduce(values[0]) { abs($0-inputValue) < abs($1-inputValue) ? $0 : $1 }
        let index = values.firstIndex(where: {$0 == match})
        return index
    }
    

  2. Because the array is sorted, a fast solution would be to do a binary search.

    Should be easy to modify this implementation (or others in the same post) to fit your purpose.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search