2016-06-11 28 views
0

私はthis questionで取り組んでいます。Golang:文字列を[] intに変換するには?

文字列をintに変換する必要があります。 この場合、「5 2 4 6 1 3」をたとえば[6] int {5,2,4,6,1,3}に変換する必要があります。 このコードの後に​​は、特にAizuArray()と書いてあります。 要素がintであると思われますhere。 私の方法が正しいかどうか教えてください。 もっと良い方法を教えてもらえますか? 私は自分のやり方が冗長であり、Java wayがはるかに簡単だと感じているので、これを尋ねます。 ありがとうございます。

package main 

import (
    "fmt" 
    "reflect" 
    "strconv" 
    "strings" 
) 

func AizuArray(A string, N string) []int { 
    a := strings.Split(A, " ") 
    n, _ := strconv.Atoi(N) // int 32bit 
    b := make([]int, n) 
    for i, v := range a { 
     b[i], _ = strconv.Atoi(v) 
    } 
    return b 
} 

func main() { 
    A := "5 2 4 6 1 3" 
    N := "6" 
    j := strings.Split(A, " ") 
    for _, v := range j { 
     fmt.Println(reflect.TypeOf(v)) 
    } 
    b := AizuArray(A, N) 
    fmt.Println(b) 
    for _, v := range b { 
     fmt.Println(reflect.TypeOf(v)) 
    } 
} 
+1

、外出先でのサイズは、ホストCPUに依存int型であることに注意してください、それは上の32ビットCPUと64ビットの32ビットですよく、64ビットのCPU。 – OneOfOne

+0

@OneOfOneご意見ありがとうございます。はい、私が 'ParseInt()'を使うと、ネットブックにエラーが発生しました。だから、私は代わりに 'Atoi'を使いました。 – yamachan

答えて

3

あなたは私のやり方が正しいなら、私に教えてくださいますか?

あなただけの文字列(スペース区切り整数)を変換したい場合は、[]

func AizuArray(A string, N string) []int { 
a := strings.Split(A, " ") 
n, _ := strconv.Atoi(N) // int 32bit 
b := make([]int, n) 
for i, v := range a { 
    b[i], err = strconv.Atoi(v) 
    if err != nil { 
     //proper err handling 
     //either b[i] = -1 (in case positive integers) 
    } 
} 
return b 
} 

をintに、あなたのアプローチが正しいです。

私はこの質問に取り組んでいます。あなたがそうするべきでSTDINからの入力をしたい、このquestionの文脈では

package main 

import (
    "fmt" 
) 

func insertionSort(arr []int) { 
    //do further processing here. 
    fmt.Println(arr) 
} 

func main() { 
    var N int 
    fmt.Scanf("%d", &N) 
    b := make([]int, N) 
    for iter:=0;iter<N;iter++ { 
     fmt.Scanf("%d",&b[iter]) 
    } 
    insertionSort(b) 
} 
+0

ありがとうございます。ああ、エラー処理については後で書きます。ありがとう。あなたの次のことに感謝します。ああ、私は 'fmt.Scanf'を試みます。どうもありがとうございます。 – yamachan

+0

ああ、 'fmt.Scanf()'は 'scanner = bufio.NewScanner(os.Stdin)よりも優れています。 scanner.Scan(); N:= scanner.Text() '? – yamachan

+1

だから、より速い入力をしたい場合はhttp://stackoverflow.com/questions/31333353/faster-input-scanningをご覧ください。 –

0

私は何かが欠けていない限り、あなたは過度に複雑に思う。

https://play.golang.org/p/HLvV8R1Ux-

package main 

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

func main() { 
    A := "5 2 4 6 1 3" 

    strs := strings.Split(A, " ") 
    ary := make([]int, len(strs)) 
    for i := range ary { 
     ary[i], _ = strconv.Atoi(strs[i]) 
    } 

    fmt.Println(ary)  
} 
+1

私はそれが適切ではないと思うのであなたの答えを投票しました。まず、質問には何も追加しません(質問内のコードを再利用し、その一部を削除するだけです)。 2つ目はgoで返されるエラーを避けることは常に悪いアドバイスです。第三に、問題のリンクによれば、値Nが存在し、使用されなければならない。そして最後に、関数を使うことはより良いコーディング方法なので、それを削除する必要はありません。 – jnmoal

+0

あなたが尋ねた正確な質問に私は答えます。または、クリーンな「プロダクション」レディーコードで問題を完全に解決してほしいですか? Stackoverflowは、これらの種類の質問の場所ではありません。 – Darigaaz

+0

@Darigaazご回答いただきありがとうございます。うん、私はそれを複雑にしたと思った。だから私は尋ねた。私はGoの初心者なので、わからない、見つけられないパッケージや図書館のようなものがあると思った。ああ、私はコメントを書かなかった。私はあなたの質問を解決することを暗示しませんでした。私はStringをIntに変換する部分を尋ねたがっています。 – yamachan

関連する問題