亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將float64轉換為不包含[]的字符串

將float64轉換為不包含[]的字符串

Go
Cats萌萌 2021-04-15 13:15:49
我正在嘗試掃描一些文件夾并對它們進行排序,以找到最高的版本號。{“ 10.1”,“ 9.6”,“ 7.2”},然后建立路徑。但是,我得到的是在路徑中的[]括號,我需要擺脫這些。這就是我得到的:C:\Program Files\PostgreSQL\[10.1]\bin\psql.exe        root := "C:/Program Files/PostgreSQL"        files, err := ioutil.ReadDir(root)        if err != nil {            return "", err        }        folders := []float64{}        for _, f := range files {            if f.IsDir() {                if converted, err := strconv.ParseFloat(f.Name(),64); err == nil {                    folders = append(folders, converted)                }            }        }        sort.Float64s(folders)        log.Println(folders[len(folders)-1:])        highestVersion := fmt.Sprintf("%v",folders[len(folders)-1:])        execPath = filepath.Join(root, highestVersion, "bin", "psql.exe")         log.Println(execPath)
查看完整描述

2 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

問題在這條線上:

highestVersion := fmt.Sprintf("%v",folders[len(folders)-1:])

%v格式說明,如一些人所說,是“價值”的簡寫。現在,讓我們看一下您的價值:

folders[len(folders)-1:]

您在這里所說的是,“從頭folders開始len(folders-1)”。您的變量是一個切片,僅包含中的最后一項folders。

通過在值周圍使用方括號來打印切片,并且由于您擁有一個值,因此它將打印由方括號括起來的值。

如果只想打印該位置中包含的浮點數,則應刪除注釋中指定的冒號。我建議您使用fmt動詞%f或進行打印%g,具體取決于您的用例。

可以在pkg / fmt文檔中找到有關哪些動詞可用printf以及其他相關功能的更多信息。


查看完整回答
反對 回復 2021-04-19
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

一種可能的方法是使用正則表達式以確保每個路徑都具有預期的格式,并通過子匹配(匹配組)將版本號提取為浮點,然后按其浮點版本號值對路徑字符串進行排序并返回最高的。


例如:


func main() {

  paths := []string{

    `C:\Program Files\PostgreSQL\[1.2]\bin\psql.exe`,

    `C:\Program Files\PostgreSQL\[9.6]\bin\psql.exe`,

    `C:\Program Files\PostgreSQL\[10.1]\bin\psql.exe`,

    `C:\Program Files\PostgreSQL\[7.2]\bin\psql.exe`,

  }


  sort.Slice(paths, func(i, j int) bool {

    return parseVersion(paths[i]) >= parseVersion(paths[j])

  })

  fmt.Printf("OK: highest version path = %s\n", paths[0])

  // OK: highest version path = C:\Program Files\PostgreSQL\[10.1]\bin\psql.exe

}


var re = regexp.MustCompile(`C:\\Program Files\\PostgreSQL\\\[(\d+\.\d+)\]\\bin\\psql.exe`)


func parseVersion(s string) float32 {

  match := re.FindStringSubmatch(s)

  if match == nil {

    panic(fmt.Errorf("invalid path %q", s))

  }

  version, err := strconv.ParseFloat(match[1], 32)

  if err != nil {

    panic(err)

  }

  return float32(version)

}

當然,如果這對您的用例很重要,則可以修改路徑正則表達式以匹配不同的位置模式。


查看完整回答
反對 回復 2021-04-19
  • 2 回答
  • 0 關注
  • 276 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號