見出し画像

Rustで100本ノック: 配列へのアクセス

100本ノックを今朝はちょっと進めてます。毎日というのもちょっと難しいけどね。タイトル絵は配列よろしく並んでるペンギンさん。ちょっと涼しくなると良いな…

で、No.17にていよいよ配列のお出まし。Rustでは配列はスタック上に取られる一般的な配列表現のほかにも、ベクタと呼ばれるヒープ上の表現が登場します。こちらはベクタということもあって伸び縮みできるみたいです。

問題はアクセス方法で、単純な配列の場合、for-in構文で渡そうとすると失敗します。

for i in a {
    println!("{}", i);
}

この書き方は結構多くの言語で見る表現ですよね。少なくともJavaでは見てます(授業で使ってるし)。

画像1

配列にIteratorトレイトは実装されてないためこの書き方はできないとのことで、&をつけてスライスというものに見せかけるか、配列に対するメソッドiter()でイテレータアクセスを明示しろということのようです。

というかスライスとは?ということに。Pythonでスライスってでてますね。配列オブジェクトへのアクセスの際に特定の範囲を切り出すアレですね

# Python
a = [0, 1, 2, 3]
b = a[0:2]
c = a[:2]
d = a[1:]

Rustでは「型は決まってるけどサイズが決まってない状態の配列」という感じでしょうか。

&[T]という形でスライスは表現できるようなので、これで対応できるようですね。

    for i in &a {
       println!("{}", i);
   }

ということでOKです。問題はRLSで、iter()が補完候補に挙がってこないことでしょうか。

画像2

なにはともあれNo.16はこれにてOK、かな?

この記事が気に入ったらサポートをしてみませんか?