2014-07-26 132 views
7

如何将数组中的字符串转换为数组中的整数?转:将数组中的字符串转换为整数

["1", "2", "3"] 

[1, 2, 3] 

我搜索了一些解决方案在线,但无法找到它。我试图循环访问数组,并执行strconv.ParseFloat(v,64),其中v是值,但它不起作用。

回答

12

你将不得不循环切片。如果切片仅包含整数,则不需要ParseFloat,Atoi就足够了。

import "fmt" 
import "strconv" 

func main() { 
    var t = []string{"1", "2", "3"} 
    var t2 = []int{} 

    for _, i := range t { 
     j, err := strconv.Atoi(i) 
     if err != nil { 
      panic(err) 
     } 
     t2 = append(t2, j) 
    } 
    fmt.Println(t2) 
} 

Playground

6

例如,

package main 

import (
    "fmt" 
    "strconv" 
) 

func sliceAtoi(sa []string) ([]int, error) { 
    si := make([]int, 0, len(sa)) 
    for _, a := range sa { 
     i, err := strconv.Atoi(a) 
     if err != nil { 
      return si, err 
     } 
     si = append(si, i) 
    } 
    return si, nil 
} 

func main() { 
    sa := []string{"1", "2", "3"} 
    si, err := sliceAtoi(sa) 
    if err != nil { 
     fmt.Println(err) 
     return 
    } 
    fmt.Printf("%q %v\n", sa, si) 
} 

输出:

["1" "2" "3"] [1 2 3] 

游乐场:

http://play.golang.org/p/QwNO8R_f90

0

切片是一个阵列段的描述符
它由
- 一个指针阵列,
- 该段的长度,并
- 它的容量(该段的最大长度)

下面,串阵列/切片转换为int阵列/切面:

package main 

import (
    "fmt" 
    "log" 
    "strconv" 
    "strings" 
) 

func Slice_Atoi(strArr []string) ([]int, error) { 
    // NOTE: Read Arr as Slice as you like 
    var str string       // O 
    var i int        // O 
    var err error       // O 

    iArr := make([]int, 0, len(strArr)) 
    for _, str = range strArr { 
     i, err = strconv.Atoi(str) 
     if err != nil { 
      return nil, err     // O 
     } 
     iArr = append(iArr, i) 
    } 
    return iArr, nil 
} 

func main() { 
    strArr := []string{ 
     "0 0 24 3 15", 
     "0 0 2 5 1 5 11 13", 
    } 

    for i := 0; i < len(strArr); i++ { 
     iArr, err := Slice_Atoi(strings.Split(strArr[i], " ")) 
     if err != nil { 
      log.Print("Slice_Atoi failed: ", err) 
      return 
     } 
     fmt.Println(iArr) 
    } 
} 

输出:

[0 0 24 3 15] 
[0 0 2 5 1 5 11 13] 

我在项目中使用,所以没有从对方回复,标记为// O代表上方形成小的优化,也固定一个位在readabi为他人服务

祝你好运