1. 程式人生 > >數組與集合(基礎篇)

數組與集合(基礎篇)

效率 變量 hset 取出 集合 初始 queue 字符 行為

一、數組

能存放任意多個同類型的數據
1. 數據的聲明與賦值
合並書寫:數據類型[] 變量名 = new 數據類型[長度]
① 聲明:數據類型[] 變量名;
② 賦值:變量名 = new 數據類型[長度]
2. 數組項的讀取與修改
讀取:變量名[索引]
(從指定數組中,通過編號取出某一個數組項的值,返回類型與數組項類型的值相同)
修改:變量名[索引] = 值;
示例:
int [ ] numbers = new int[3];
numbers[0] = 3;
numbers[1] = -2;
numbers[3] = numbers[0] * 2 + numbers[1];
Console.WriteLine(numbers[3]);
索引範圍0-4
3.讀取數組的長度
代碼格式:變量名.Length
返回類型 int
示例:
創建一個長度為3的字符串數組,然後依次為它的每一項分別賦值為a,b,c。最後輸出該數組的長度。
string[] strs = new string[3];
strs[0] = "a";
strs[1] = "b";
strs[2] = "c";
Console.Write(strs.Length);
簡化為:
string[] strs = {"a","b","c"};
Console.Write(strs.Length);
Console.WriteLine(numbers.Length);
4. 數組初始化器
數組初始化器是指:給數組賦值的同時,指定數組每一項的值
代碼①:
int[] nums; //聲明數組
nums = new int[3]{2, 5, 1}; // 使用數組初始化器,給數組賦值的同時指定它每一項的值

// 使用數組初始化器,給數組賦值的同時指定它每一項的值
string[] strs = new string[2]{"Hello", "World"};
代碼②:
//不指定數組長度,編譯器會根據初始化器中的數量自動填充數組長度
int[] nums1 = new int[]{2,3};// 編譯器會將該數組的長度設置為2
int[] nums2 = new int[]{2,3,1};// 編譯器會將該數組的長度設置為3
簡化為:
int[] nums1 = {2,3};
int[] nums2 = {2,3,1};

二、數組的定長性


指一個數組創建後,它的長度固定不變

數組適用於數據數量固定的場景:
1. 適合使用數組的場景:
① 保存100以內的所有質數
② 保存太陽系中所有已知行星的數據
③ 保存標準撲克牌中的所有牌面數據
④ 保存一個星期的所有日期
⑤ 其他定長的數據場景
2. 不適合使用數組的場景:
① 保存一個班的學生信息
② 保存一年中的所有日期
③ 保存鬥地主遊戲中某玩家的手牌數據
④ 保存遊戲中某玩家的裝備信息
⑤ 其他不定長的數據場景
示例:
int[] numbers = new int[3];
numbers[0] = 3;
numbers = new int[2];
Console.WriteLine(numbers[0]);
結果為0

三、數組的遍歷


示例:
有一個數據,變量名為 arrays,請輸出該數組每一項的值。
Console.WriteLine(arrays[i]); //變量i的變化範圍:0—arrays.Length-1
for (int i = 0; i <=arrays.Length -1; i++)
{
Console.WriteLine(arrays);
}
是指從數組的第一項開始,一次取完數組的所有項
要實現數組的遍歷,可以使用循環
循環的變量從0開始,依次取到數組的最大下標(數組的長度 -1)
在循環體中,使用循環變量作為下標,即可取出數組每一項的值
for (int i = 0; i < arrays.Length; i++)
{
Console.WriteLine(arrays[i]);
}

四、交換排序


排序問題:有一個數組,數組中存放了很多數字,現要求將數組中的數字按照從小到大的順序排列
示例:
分析:如果索引為0的數字比索引為 j 的數字大,則交換。// j =1— arrays.Length-1
for (int j = 0; j < arrays.Length-1; j++ )
{
for (int j = i+1; j < arrays.Length; j++ )
{
if (arrays[0] >arrays[ j ] )
{
int temp = arrays[0];
arrays[0] = arrays[ j ];
arrays[ j ] = temp;
}
}
}

示例:

#region 創建數組
Console.Write("請輸入數組的長度:");
int len = int.Parse(Console.ReadLine());
int[] numbers = new int[len];
for (int i = 0; i < numbers.Length; i++)
{
Console.Write("請輸入數組的第" + (i + 1) + "項:");
numbers[i] = int.Parse(Console.ReadLine());
}
#endregion

Console.Clear();

#region 升序排序
for (int i = 0; i < numbers.Length - 1; i++)
{
for (int j = i + 1; j < numbers.Length; j++)
{
if (numbers[i] > numbers[j])
{
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
#endregion

#region 輸出數組
Console.WriteLine("您輸入的數字排序後如下:");
for (int i = 0; i < numbers.Length; i++)
{
Console.Write(numbers[i] + " ");
}
Console.WriteLine();
#endregion

#region 尋找奇數
Console.WriteLine("其中,以下數字是奇數:");
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 != 0)
{
Console.Write(numbers[i] + " ");
}

}
Console.WriteLine();
#endregion

#region 尋找質數
Console.WriteLine("以下數字是質數:");
for (int i = 0; i < numbers.Length; i++)
{
bool isFind = false;
for (int j = 2; j < numbers[i]; j++)
{
if (numbers[i] % j == 0)
{
isFind = true;
break;
}
}
if (!isFind)
{
Console.Write(numbers[i] + " ");
}
}
#endregion
Console.ReadLine();

五、集合

在功能上,數組能實現的所有功能,集合都能實現
數組集合
用於儲蓄多個同類型的數據
數組
定長:用於保存固定數量的數據
占用內存少
遍歷速度快
集合
不定長:保存的數據數量,可以在程序的執行過程中,不斷發生變化
占用內存多
遍歷速度慢
C#語言支持的集合類型
List
1. 創建
① 定義:List <數據類型> 變量名;
② 賦值:變量名 = new List <數據類型>();
定義和賦值合並書寫:
List <數據類型> 變量名 = new List<數據類型>();
③ 初始化器:變量名 = new Lise<數據類型>{元素1,元素2,元素3,......元素n};
2. 操作
① 添加元素:變量名.Add(要添加的元素)
② 插入元素:向集合的指定位置,插入一個新的元素
代碼:變量名.Insert(索引,要插入的數據);
示例:
List<int> nums = new List<int>{3,5,7};
nums.Insert(1,0);
③ 刪除元素
變量名.Remove At(索引);
指刪除指定索引位置的元素
變量名.Remove(數據);
指刪除集合中填寫的數據相同的第一個匹配項
示例:
List<int>nums = new List <int>{1,1,2,3,5};
nums.Remove At(2); //表示刪除索引為2的元素
nums.Remove(1); //表示刪除與數據1相同的第一個元素
④ 修改元素
修改集合中某個元素的值
代碼:變量名[索引] = 值
讀取和修改元素與數組的操作方式完全一致
⑤ 獲取元素數量
獲取集合的長度
代碼:變量名.Count
Queue
Stack
LinkedList
Hashset
其他

六、foreach循環


只能用於遍歷數組或集合
代碼格式:
foreach(數據類型 變量 in 數組或集合)
{
循環體
}
① 表示從數組或集合中,依次取出每一項的數據
② 每取出一項數據,就把數據賦值給循環變量
③ 每一次賦值後,運行一次循環體
示例:已知有一個int類型的List集合,變量名為numbers,要求依次輸出集合中的每一項。
foreach (int item in numbers)
{
Console.WriteLine(item);
}
foreach循環也叫做只讀循環
在循環體中,不能更改集合或數組
foreach 循環:
① 只能用於遍歷
② 不能更改循環目標
③ 遍歷速度快,執行效率高
for 循環:
① 可以用於任何形式的重復行為
② 在循環體中,可以進行任何操作
③ 遍歷速度慢,執行效率低
若需要遍歷集合或數組,並且遍歷的過程中只需要讀取而不會更改,用foreach循環最合適。反之,則根據需要,選擇其他循環。

數組與集合(基礎篇)