コレクションの定義には、たいてい山括弧(<>)で囲まれたプレースホルダーが含まれ、慣習的にTという名前を使うことが多いです。このようなコレクションを、ジェネリック型と呼びます。ジェネリック型を使うと、コレクションにどんな型の要素を入れるかを、使う側で指定できます。次のサンプルコードでは、文字列の配列をインスタンス化しています。
C#の配列は、プリミティブ値や、構造体・クラスのインスタンスをまとめたコレクションです。基底クラスライブラリではList<T>として実装されており、ここでTは配列に入る要素の型を表します。APIには、配列を作成したり操作したりするための豊富なメソッドが用意されています。
配列には要素を追加したり、削除したりできます。必要に応じて大きくなったり、小さくなったりします。
var listOfStrings = new List<string>();
この演習では、Exercismで学びたいプログラミング言語の配列を管理するコードを書きます。
タスクは9つあり、そのすべてで配列を扱います。
学びたい言語を管理するには、新しい配列を作成する必要があります。
新しい空の配列を返すstaticメソッドLanguages.NewList()を実装してください。
Languages.NewList()
// => empty list
今、学びたい言語が書かれた紙があります。C#、Clojure、Elmです。
その配列を返すstaticメソッドLanguages.GetExistingLanguages()を実装してください。
Languages.GetExistingLanguages();
// => {"C#", "Clojure", "Elm"}
Exercismを見ていて面白い言語が見つかると、それを配列に追加したくなります。
配列の末尾に新しい言語を追加するstatic関数Languages.AddLanguage()を実装してください。
Languages.AddLanguage(Languages.GetExistingLanguages(), "VBA");
// => {"C#", "Clojure", "Elm", "VBA"}
言語を1つずつ数えるのは面倒です。
配列内の言語の数を数えるstaticメソッドLanguages.CountLanguages()を実装してください。
Languages.CountLanguages(Languages.GetExistingLanguages())
// => 3
指定した言語が配列に含まれているかどうかを確認するstaticメソッドLanguages.HasLanguage()を実装してください。
Languages.HasLanguage(Languages.GetExistingLanguages(), "Elm")
// => true
あるとき、自分の配列が実は逆順になっていることに気づきます!
配列を逆にするstaticメソッドLanguages.ReverseList()を実装してください。
Languages.ReverseList(Languages.GetExistingLanguages())
// => {"Elm", "Clojure", "C#"}
言語はどれも大好きですが、C#は心の中で特別な位置を占めています。そのため、次のいずれかの条件に当てはまると、言語の配列にわくわくします。
言語の配列がわくわくするものかどうかを確認するstaticメソッドLanguages.IsExciting()を実装してください。
Languages.IsExciting(Languages.GetExistingLanguages())
// => true
指定した言語を配列から削除するstaticメソッドLanguages.RemoveLanguage()を実装してください。
Languages.RemoveLanguage(Languages.GetExistingLanguages(), "Clojure")
// => { "C#", "Elm" }
配列内で言語が重複しているかどうかを確認するstaticメソッドLanguages.IsUnique()を実装してください。
このメソッドが呼ばれるとき、言語の配列(つまり仮引数)は空でないことが保証されています。また、配列が変更されてもかまいません。
Languages.IsUnique(Languages.GetExistingLanguages())
// => true