質問: ### 前提・実現したいこと シーケンスの中にコレクションがあるのでしょうか? それともコレクションの中にシーケンスがあるのでしょうか? それともシーケンスとコレクションは、別々のものですか? Enumerable.Range(0, 10)は、 IEnumerableで返されますが、これはシーケンスですか?コレクションですか? リスト、Stack、Queueはコレクションで合っていますか?(シーケンスではないですか?) 名称の区別がわかりません。 ご教示お願い致します。
回答: シーケンスとコレクションは別物です。が、深い関係があります コレクションは collection、すなわち collect → 収集するという意味から、「何かしらのデータの集まり」を表すものです。 データの集まりには、その処理方法によって * 配列 * リスト(単方向、双方向) * キュー * スタック * ディクショナリ * ハッシュ といった違いがあります。どれもデータを集めて扱うので、まとめてコレクションとして扱われます。 さて、データの集まりの中には、そのデータの中に明確な「並び順」が存在するものがあります。配列、リストあたりが代表です。リストは「あるデータの次のデータ」(双方向リストの場合は加えて前のデータ)という情報を元にデータの集合を管理しています。 並び順のあるコレクションは、そのコレクションを「並び順の順番、あるいは逆順」に都度処理するといった使い方をすることが多いのです(特にリスト)。そこで、並び順に従った操作という概念を分離したものがシーケンスになります。上に書いたように、コレクションにはいくつか種類があるので、それぞれのシーケンスの実際の動作は異なっても、「シーケンスという概念」で同じように使えるようにするためです。 質問の ``` IEnumerable zeroten = Enumerable.Range(0, 10) ``` は、「シーケンスのあるコレクション」です。シーケンスだけでも、コレクションだけでもありません。 また、リスト、スタック、キューは、いずれも並び順があるので、シーケンスのあるコレクションです。 (スタックは「後から置いたものを先に取り出す」、キューは「先に置いたものを先に取り出す」という形で順序が整理されています。スタックは文字通り「積み上げたもの」で、キューは「待ち行列」です)