2010年2月27日土曜日

型について その2 配列とスライスとmap

配列


goでは配列の定義はこうします
var arrayOfInt [10]int;
これもまた、C言語のようにIntのポインタとして扱うことはできません。
しかし要素の入れ替えは自由にできます。


スライス


スライスは概念的にはDから持ってきたのでしょうか。
配列の一部だけを参照できるポインタです。
考え方的にはPythonなどにもあったような...よく覚えてません。

チュートリアルの解説はちょっとわかりにくいのですが
var a[10]int;
という配列があったときに
as := a[3:5];
とすると、asはa[3], a[4], a[5] を参照できる配列のスライスとなるようです。
例題欲しいなぁ。


C++的にこれも使いたいその場で生成可能で次に出てくる例題はこの、
その場で生成するタイプとなっています。
func sum(a []int) int {   // returns an int
s := 0;
for i := 0; i < len(a); i++ {
s += a[i]
}
return s
}
という配列を引数に持つ関数の実行の際に、 あらかじめ配列をべつに定義する必要は無くて、定義する場所で
s := sum(&[3]int{1,2,3})
としてスライスを生成して直接代入すると、 参照する側ではint s={1,2,3} が見えると。 ユーザー定義型でこれができたらかなりいろいろ楽になりそうです。 システムコール周りが天国になりそうな雰囲気。 スライスの生成で変数が使えるのでしょうか。たぶん、できるのでしょう。 やってみたいけど今は先に進みます。 スライスって言う呼び名は日本語的にイマイチだなぁ。 配列の部分参照みたいな言い方にするともっといまいちですがやや直感的と思います。

map

mapはrubyではおなじみのmap関数ではなく perlの方のmapのようです。 ここには説明が無いので不明ですが、ハッシュや連想配列にあたる物みたいです。
m := map[string]int{"one":1 , "two":2}
map関数はすごく便利なのできっとそれもあるのだろうと思います。
(知りませんが)

もうひとつ、チャネルという言葉が出てきますけど、
何の説明も無いので次いきます。
おそらくはstreamかsocktのことをいっているんじゃないかとおもいますが
わかりませんねー。

0 件のコメント:

コメントを投稿