代码笔记
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace c_generic
{
class Program
{
static void Main(string[] args)
{
// 泛型 generic 也叫数据集合,创建的集合使用 List<T> 类型
// List<T> 数据类型存储一系列元素。 元素类型是在尖括号内指定
// 创建了一个字符串列表,在该列表中添加了三个名称,并打印了所有大写的名称。
// 注意是使用var和new标识符来定义 数据集合
var names = new List<string> { "你大爷的", "Ana", "Felipe" };
// 注意这里的循环结构
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
// List<T> 类型的一个重要方面是,既可以扩大,也可以收缩,方便用户添加或删除元素
Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
// 还可以按索引引用各项。 使用 [ 和 ] 令牌访问这些项
Console.WriteLine($"My name is {names[0]}.");
Console.WriteLine($"我添加了两个名称分别是 {names[2]} and {names[3]} to the list.");
// 不得访问超出列表末尾的项。 可以使用 Count 属性确定列表长度
Console.WriteLine($"当前列表有 {names.Count} 个数据在集合中");
// 搜索列表并进行排序
// 数据集合中有时可能会包含数以千计的元素。 若要在更大的集合中查找元素,需要在列表中搜索不同的项。
// IndexOf 方法可搜索项,并返回此项的索引。 如果项不在列表中,IndexOf 将返回 -1
// 可能无法确定列表是否包含某项,因此,应始终检查 IndexOf 返回的索引。
// 如果索引为 -1,则找不到相应项。
var index = names.IndexOf("Felipe");
if (index != -1)
{
Console.Write($"字符串 {names[index]} 在此数据集合中的索引值是 {index} 。");
Console.WriteLine(" 因为第一个索引值是0,第二个初始数据已经被Remove方法删除");
}
var notFound = names.IndexOf("你大爷");
Console.WriteLine($"当数据没有找到时, IndexOf 方法的返回值是 {notFound}");
// 对列表中的项进行排序。 Sort 方法按正常顺序(如果是字符串则按字母顺序)对列表中的所有项进行排序
// 注意字符串排序中,汉字会被排序到后面
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
Console.WriteLine(" ");
Console.WriteLine(" ");
// 关于数据集合 (列表中的项)(泛型) ,咱们放入数字再试试看
// 试研究下斐波那契数列
Console.WriteLine("斐波那契数列中的每个数字都是前两个数字之和");
var fibonacciNumbers = new List<int> { 1, 1 };
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
fibonacciNumbers.Add(previous + previous2);
foreach (var item in fibonacciNumbers)
{
Console.WriteLine(item);
}
// 试着生成斐波那契数列中 的前 n 个数
Console.WriteLine("试着生成斐波那契数列中 的前 n 个数");
int n = 20;
var Nums = new List<int> { 1, 1 };
var n1 = Nums[Nums.Count - 2];
var n2 = Nums[Nums.Count - 1];
Console.Write($" {n1} ");
Console.Write($" {n2} ");
for (int i = 3; i <= n; i++)
{
int currentN = Nums[Nums.Count - 2] + Nums[Nums.Count - 1];
Nums.Add(currentN);
Console.Write($" {currentN} ");
}
// 深入参考,见后面
Console.ReadLine();
}
}
}数据集合-泛型-列表中的项深入参考
选择数据集合类型
https://docs.microsoft.com/zh-cn/dotnet/standard/collections/selecting-a-collection-class
常用的数据集合类型
https://docs.microsoft.com/zh-cn/dotnet/standard/collections/commonly-used-collection-types
何时使用泛型集合
https://docs.microsoft.com/zh-cn/dotnet/standard/collections/when-to-use-generic-collections