集合的定义通常会在尖括号中放入一个占位符,按照惯例通常写作T。这样的集合称为泛型。这样,集合的使用者就可以指定要在集合中存储什么类型的元素。在下面的示例代码中,我们实例化了一个字符串数组。
C# 中的数组是基元值或结构体、类实例的集合。它们在基类库中实现为List<T>,其中T是数组中元素的类型。API 提供了丰富的方法来创建和操作数组。
元素可以添加到数组中,也可以从数组中移除。数组会根据需要增长和缩小。
var listOfStrings = new List<string>();
在这个练习中,你将编写代码,记录一份你想在 Exercism 上学习的编程语言数组。
共有 9 个任务,每一个都要和数组打交道。
为了记录你想学习的语言,你需要创建一个新数组。
实现静态方法 Languages.NewList(),让它返回一个新的空数组。
Languages.NewList()
// => empty list
目前,你手上有张纸,上面列出了你想学习的语言:C#、Clojure 和 Elm。
请实现静态方法 Languages.GetExistingLanguages(),返回这个数组。
Languages.GetExistingLanguages();
// => {"C#", "Clojure", "Elm"}
当你在 Exercism 上探索、发现更多有趣的语言时,你会想把它们加进数组里。
实现静态函数 Languages.AddLanguage(),把一门新语言添加到数组末尾。
Languages.AddLanguage(Languages.GetExistingLanguages(), "VBA");
// => {"C#", "Clojure", "Elm", "VBA"}
一门一门地清点语言很不方便。
实现静态方法 Languages.CountLanguages(),统计数组中语言的数量。
Languages.CountLanguages(Languages.GetExistingLanguages())
// => 3
实现静态方法 Languages.HasLanguage(),检查某门语言是否存在。
Languages.HasLanguage(Languages.GetExistingLanguages(), "Elm")
// => true
某一天你发现,你的数组其实是倒序排列的!
实现静态方法 Languages.ReverseList(),反转你的数组。
Languages.ReverseList(Languages.GetExistingLanguages())
// => {"Elm", "Clojure", "C#"}
虽然你热爱所有语言,但 C# 在你心中有特殊的位置。因此,只要满足下面任意一个条件,你就会对一份语言数组感到非常兴奋:
实现静态方法 Languages.IsExciting(),检查一份语言数组是否令人兴奋:
Languages.IsExciting(Languages.GetExistingLanguages())
// => true
请实现静态方法 Languages.RemoveLanguage(),从数组中移除指定的语言。
Languages.RemoveLanguage(Languages.GetExistingLanguages(), "Clojure")
// => { "C#", "Elm" }
请实现静态方法 Languages.IsUnique(),检查数组中是否有任何语言重复出现。
调用这个方法时,语言数组(也就是那个形参)保证不为空,数组是否被修改也没有关系。
Languages.IsUnique(Languages.GetExistingLanguages())
// => true