2014-07-26 27 views
7

Làm cách nào để chuyển đổi chuỗi trong một mảng thành số nguyên trong một mảng khi đang di chuyển?Go: chuyển đổi chuỗi thành mảng thành số nguyên

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

để

[1, 2, 3] 

tôi đã tìm kiếm một số giải pháp trực tuyến, nhưng không thể tìm thấy nó. Tôi đã cố gắng lặp qua mảng và đã làm strconv.ParseFloat (v, 64) trong đó v là giá trị nhưng nó không hoạt động.

Trả lời

12

Bạn sẽ phải lặp qua thực tế lát. Nếu lát chỉ chứa số nguyên, không cần ParseFloat, Atoi là đủ.

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) 
} 

Trên Playground.

6

Ví dụ,

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) 
} 

Output:

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

Playground:

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

0

Một lát là một mô tả của một phân khúc mảng
Nó bao gồm
- một con trỏ đến mảng,
- chiều dài của phân khúc này, và
- Công suất của nó (độ dài tối đa của phân khúc)

Dưới đây, chuỗi Array/Slice được chuyển thành int Array/Slice:

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) 
    } 
} 

Output:

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

tôi đã sử dụng trong một dự án, do đó đã làm một việc tối ưu nhỏ từ trả lời khác, đánh dấu là // O cho ở trên, cũng cố định một chút trong readabi lity cho những người khác

Chúc may mắn nhất

Các vấn đề liên quan