コレクションとジェネリクス―Rustのジェネリクスをベクターで理解する基本からしっかり学ぶRust入門(9)

Rustについて基本からしっかり学んでいく本連載。第9回は、Rustのコレクションとジェネリクスについて。

» 2022年03月25日 05時00分 公開

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「基礎からしっかり学ぶRust入門」のインデックス

連載:基礎からしっかり学ぶRust入門

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。具体的な利用方法は連載第1回を参考にしてください。


 コレクションは、モダンなプログラミング言語では必須のユーティリティーです。本連載第9回では、コレクションの種類(ベクター、ハッシュマップ、文字列)を紹介し、コレクションには欠かせないジェネリクスも紹介します。

コレクションとは?

 コレクション(collection)とは、文字通り複数の要素を集めたデータ構造を言います。要素を収納することからコンテナとも呼ばれます。第2回で取り上げた配列もコレクションと言えますが、Rustでは以下のものをコレクションとしています。

  • ベクター
  • 文字列
  • ハッシュマップ

 コレクションは、配列に比べると要素の追加や削除が容易で、要素のアクセスも添え字に限らないなどの柔軟性を備えます。まずは、Rustの備える3つのコレクションについて、概要をあらかじめまとめておきます。

ベクター

 ベクター(Vector)は、同じデータ型の値を複数持つことのできるコレクションです。他の言語ではリストと呼ばれることもあります。同じデータ型というのがポイントで、データ型を混在させることはできません。また、値の順序関係が維持されます。

 配列では要素数が固定されていて、領域の余剰と不足という問題が常にありましたが、ベクターを用いることで可変長のリストを簡単に作成できます。ベクターでは、初期値を用いた変数宣言、値の追加と破棄、値の参照、値の挿入と削除などが基本的な操作になります。

ベクターのイメージ

文字列

 文字列はこれまでも散々出てきましたが、実はこれもコレクションです。データ型がu8(符号なし8ビット整数)であるベクターのラッパーが文字列型、すなわちString型です。String型では、UTF-8エンコードされた文字列を8bitすなわちバイト列として保持しています。

 ベクターのラッパーであるので、ベクターと同様のメソッドを備えており、値の追加と取り出し、値の参照、値の挿入と削除といった操作を可能にしています。ただし、UTF-8エンコードされた文字列の操作には文字の境界を意識する必要があり、ベクターほど単純ではありません。

【補足】UTF-8エンコード

 UTF-8とは、Unicode文字体系におけるエンコーディング方式の1つです。従来のASCII文字(7ビット文字)はそのまま1バイトで表現し、残りの文字を2〜6バイトで表現します。例えば、平仮名は3バイトで表現されます。ASCII文字との親和性が高いため、インターネットの世界を中心に多く使われています。UTF-8は可変長のエンコーディング方式であるため、文字列の途中を見てもそれが文字の始まりなのか、そうでないのか見分けることは困難です。これが、文字列の操作をベクターほど単純なものにはできない理由です。

ハッシュマップ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。