代码笔记

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