I have an array of DataPoints, with an x and y value:

```
struct DataPoint: Identifiable, Hashable {
let x: Double
let y: Double
var id: String { String(x/y) }
}
```

I am trying to get the x value that corresponds to the max y value. I am using this, but sometimes get an out of range error:

```
let dataPoints: [DataPoint] = await calculateDataPoints()
if let index = dataPoints.indices.max(by: { dataPoints[$0].y < dataPoints[$1].y }) {
return dataPoints[index].x
}
```

`calculateDataPoints()`

is an async function.

Maybe there is another way to do this?

### >Solution :

I think you should first check if the `dataPoints`

array is empty before finding the maximum value, in my scenario if the `dataPoints`

array is empty, the `max(by:)`

function will return `nil`

,so the code inside the `if let`

block will not be executed.

If you want to return a default value of `0.0`

when the `dataPoints`

array is empty:

```
let dataPoints: [DataPoint] = await calculateDataPoints()
if let maxDataPoint = dataPoints.max(by: { $0.y < $1.y }) {
return maxDataPoint.x
} else {
return 0.0
}
```