max{max=v}elseifv"/> max{max=v}elseifv">

首頁  >  文章  >  後端開發  >  無效操作:v > max(類型參數 T 與 > 不可比較)

無效操作:v > max(類型參數 T 與 > 不可比較)

WBOY
WBOY轉載
2024-02-14 19:54:09640瀏覽

无效操作:v > max(類型參數T 與> 無法比較)

php小編蘋果在這裡為大家解析一個常見的錯誤訊息:"無效操作:v > max(類型參數T 與> 不可比較)"。在使用PHP語言程式設計時,我們可能會遇到這種錯誤,特別是在比較類型參數時。本文將詳細解釋這個錯誤的原因以及如何正確處理,幫助讀者更好地理解和解決這個問題。無效操作錯誤是比較兩個不可比較的類型時出現的,解決這個問題的關鍵是確保比較的類型是可比較的。在下文中,我們將逐步介紹具體的解決方法。

問題內容

package main

import (
    "fmt"
)

func findMinMax[T comparable](arr []T) (min, max T) {
    for _, v := range arr {
        if v > max {
            max = v
        } else if v < min {
            min = v
        }
    }
    return min, max
}

func main() {
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    fmt.Println(findMinMax(arr))
}

我非常樂意幫助您解決在 findminmax 函數中遇到的問題。錯誤訊息顯示v > max 或v d278ee6b3791a1d966b8ca27e4caeb46 運算子所必需的。

有序約束在 golang.org/x/exp/ 中定義constraints 包,請參考 ##constraints.ordered#。

使用您的程式碼進行編譯:

import (
    "fmt"

    "golang.org/x/exp/constraints"
)

func findminmax[t constraints.ordered](arr []t) (min, max t) {
    for _, v := range arr {
        if v > max {
            max = v
        } else if v < min {
            min = v
        }
    }
    return min, max
}

go playground 上嘗試。

它給出了錯誤的結果,因為您從零值開始

minmax ,並且如果傳遞的切片中的所有值都大於或小於零值,則minmax 將保持零值。

一個簡單的修正方法是,如果傳遞的切片不為空,則使用第一個值初始化

minmax

func findminmax[t constraints.ordered](arr []t) (min, max t) {
    if len(arr) > 0 {
        min, max = arr[0], arr[0]
    }

    for _, v := range arr {
        if v > max {
            max = v
        } else if v < min {
            min = v
        }
    }
    return min, max
}

這將輸出(在

go playground 上嘗試):

1 9

請注意,如果您使用浮點類型,則必須明確處理

nan 值,因為未指定它們與其他浮點數的順序。

以上是無效操作:v > max(類型參數 T 與 > 不可比較)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除