viedev
viedev

Reputation: 1567

Get index for closest value in array

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?

Upvotes: 0

Views: 392

Answers (2)

viedev
viedev

Reputation: 1567

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
}

Upvotes: 0

meaning-matters
meaning-matters

Reputation: 22946

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.

Upvotes: 1

Related Questions