6453


Goでスライスの型を変換したいのですが・・・  
下のように[]int型のスライスがあり、それを[]float64型に変換したいと思っています。  
forループをつかって1つずつ取り出し、それを[]float64型のスライスに追加していく方法もありますが、そのスライス自体の型を変えるにはどうすればいいですか?

[code]

    
    package main
    
    import "fmt"
    
    func main() {
        int_slice := []int{1, 2, 3, 4, 5}
        //int_sliceを[]float64型のスライスにしたい
    }
    
    
    
[/code]


CC BY-SA 3.0
2015-02-13T13:24:45.110
6451
2015-02-14T07:17:02.583
2015-02-14T07:17:02.583
5246
5246
question
go
Golangでスライスの型を変更する


スライスの型を直接変換する方法はありません。  
forループを使って一つずつ変換するのが一般的です。

[code]

    package main
    
    func intToFloat64(i []int) []float64 {
        f := make([]float64, len(i))
        for n := range i {
            f[n] = float64(i[n])
        }
        return f
    }
    
    func main() {
        int_slice := []int{1, 2, 3, 4, 5}
        float_slice := intToFloat64(int_slice)
    }
    
[/code]


CC BY-SA 3.0
2015-02-13T13:59:49.913
6453
2015-02-13T13:59:49.913
3639
6451
answer


h2so5 さんの回答と同じなのですが、メソッドを作ってみます。

[code]

    package main
    
    import (
      "fmt"
      "reflect"
    )
    
    type int_slice_t []int
    
    func (is int_slice_t) float64() []float64 {
      f := make([]float64, len(is))
      for i, v := range is {
        f[i] = float64(v)
      }
      return f
    }
    
    func main() {
      int_slice := int_slice_t{1, 2, 3, 4, 5}
    
      float64_slice := int_slice.float64()
    
      fmt.Println(reflect.TypeOf(int_slice))
      fmt.Println(reflect.TypeOf(float64_slice))
      fmt.Printf("%v", float64_slice)
    }
    
[/code]

`int_slice` を `[]int` で作成する場合は、

[code]

    int_slice := []int{1, 2, 3, 4, 5}
    float64_slice := int_slice_t(int_slice).float64()
    
[/code]

などとします。


CC BY-SA 3.0
2015-02-13T22:10:18.400
6464
2015-02-13T23:25:54.190
2015-02-13T23:25:54.190
6451
answer