1. 程式人生 > >C#基礎-數組與集合

C#基礎-數組與集合

進行 ins 常見 有一個 max class 獲取 交換 each循環

一、數組與集合
數組:能存放任意多個同類型的數據

數據項:類型相同

①每一個數據型都有一個編號(索引或下標)

②數據的索引(下標)是一個int類型的數字

③從0開始,依次為數據中每一個數組項編號

數組的聲明與賦值

聲明:數據類型[ ] 變量名;

賦值:變量名[索引] = 值;

讀取數組的長度 變量名.Length 返回類型為int

合並書寫:數據類型[ ] 變量名 = new 數據類型[長度];
(數組的聲明與賦值, 數據型的讀取與修改, 讀取數組的長度)

數組項的默認值:一個數組創建後,它每一個數組項的值為數組項類型的默認值。

常見默認值: string類型 默認值為mull(表示沒有任何數據)

示例

創建一個長度為3的字符串數組,然後依次為它的每一項賦值為a、b、c、,最後,輸出該數組的長度

合並書寫

strs[0] = "a";
strs[2] = "c"; sring[ ] strs = {"a","b","c"};
Console.Write(strs.Length); Console.Write(strs.Length);


numbers[0] = 3;
numbers[2] = numbers[0] * 2 + numbers[1];
Console.WriteLine(numbers.Length); 控制臺輸出4,5

二、數組的定長性

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

nums = new int [6]; 不再使用上一個數組,重新建立一個長度為5的數組

數組適用於數據數量固定的場景

適合使用數組的場景:保存100以內的所有質數
保存太陽系中所有已知行星的質量
保存標準撲克中的所有牌面數據
保存一個星期的所有日期
其他定長的數據場景

不適合使用數組的場景:保存一個班學生信息
保存一年中的所有日期
保存鬥地主遊戲中某玩家的手牌數據
保存遊戲某玩家的裝備信息
其他不定長的數據場景

三、數組的遍歷

重復行為:輸出一個數組項

代碼書寫格式:Console.WriteLine(arrays [?]);其中?為索引

int i = ?;
變量i的變化範圍:0~arrays,Length-1 也可以寫成:i < arrays.Length

遍歷

定義:是指從數組的第一項開始,依次取完整數組所有項

①實現數組的遍歷,可以使用循環

②循環變量從0開始,依次取到數組的最大下標(數組的長度-1)

③在循環體中,使用循環體變量作為下標,即可取出數組每一項的值

{
}

完整實現代碼

Console.Write("親輸入數組的長度:");
int len = int,Parse(Conesole,ReadLine());
//根據用戶的輸入創建數組,並遍歷數組為其每一項賦值
int[ ] nums = 0; i < nums.Length; i++
{
Console,Write("請輸入數組第"+ (i + 1) + "項的值:");
nums[i] = int.Parse(Console.ReadLine());
}
//遍歷數組nums,依次輸出數組中的值
Console.Write("數組的所有項是:");
for (int i = 0; i < nums.Length; i++)
{
Console.Write(nums[i]);
if (i < nums.Length - 1)//不是最後一項
Console.Write(",");//輸出一個逗號分隔

四、交換排序

根據輸入的數進行順序排序:簡化排序:如何把最小的數字,放置到數組索引未0的位置

實現方法:把第一個位置的數字拿出來依次和後面位置的數字進行比較,如果比後面位置數字大,則交換位置

全部代碼實現

for (int i = 0; i < numbers.Count - 1; i++)
{
for (int j = i + 1; j < numbers.Count; j++)
{ 
if(numbers [i]>numbers [j])
{
int temp = numbers[i];
numbers[i] = numbers [j];
numbers[j] = temp;
}
}
}

  

五、數組分析器

代碼示例:

Console.Write("請輸入數組的長度:");
int n = int.Parse(Console.ReadLine());
int[] nums = new int[n];
{

for (int i = 0; i < nums.Length; i++)
{
Console.Write("請輸入數組的第" + (i + 1) + "項:");
nums[i] = int.Parse(Console.ReadLine());
}
Console.Clear();
}
for (int i = 0; i < nums.Length - 1; i++)
{
for (int j = i + 1; j < nums.Length; j++)
if (nums[i] > nums[j])
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
Console.Write("你輸入的數字從小到大的排序是:");
for (int i = 0; i < nums.Length; i++)
{
Console.Write(nums[i] + " ");
}
Console.ReadLine();
{
Console.Write("你輸入的數字其中是奇數的是:");
for (int i = 0; i < nums.Length; i++)
if (nums[i] % 2 != 0)
{

{
Console.Write(nums[i] + " ");
}
}
Console.ReadLine();
}
Console.Write("你輸入的數其中是質數的是:");
for (int i = 0; i < nums.Length; i++)
{

bool isFind = false;

 for (int j = 2; j < nums[i]; j++)

{
if (nums[i] % j == 0)
{
isFind = true;
break;
}

}

if (isFind)
{

}
else
{
Console.Write(nums[i] + " ");
} 
}
Console.ReadLine();

六、集合

數據:定長(用於保存固定數量的數據)占內存少 遍歷速度快

集合:不定長(保存的數據數量,可以在程序的執行過程中,不斷的發生變化) 占內存多 遍歷速度慢

List集合

創建:定義:List<數據類型> 變量名;

賦值:變量名 = new List<數據類型>(); //集合是不定長的所以賦值是無需指定長度,賦值後長度可以變化

初始化器:變量名 = new List<數據類型>{元素1,元素2,···,元素n,};

操作

1.添加元素:變量名.Add(要添加的數據);

nums.Add(1);
nums.Add(3);

2.插入元素:向集合的指定位置插入一個新的元素

變量名.Insert(索引,要插入的數據);

nums.Insert(1,10);

3.刪除元素:變量名.RemoveAT(索引);刪除指定索引位置的元素

變量名.Remove(數據);
刪除集合中與填寫的數據相同的第一個匹配項

nums.RemoveAt(2);
nums.Remove(1);

4.修改元素:修改元素中某一個值

變量名[索引] = 值;

代碼實現

int maxIndex = numbers.Count - 1;
Console.Write("請您輸入一個要刪除的下標(0-"+maxIndex +")");
int index = int.Parse(Console.ReadLine());
if (index < 0 || index > maxIndex)
{
Console.WriteLine("呀!你輸入有誤,下標超出範圍了,按回車鍵繼續");
Console.ReadLine();
}
else
{
Console.WriteLine("請你重新輸入一個新的數字");
int newNum = int.Parse(Console.ReadLine());
numbers[index] = newNum;
}


5.獲取元素數量:集合的長度 變量名.Count

總結:在功能上,數組能實現的所有功能集合都能實現反之,集合能實現的某些功能,數據難以實現(數據, 集合, List集合)

c#的集合類型

}

for循環現實:效率低

{
}

foreach和for的對比

foreach:只用於遍歷,不能更改循環目標,遍歷速度快,執行效率高
for:可以用於任何形式的重復行為,在循環體重,可以進行任何操作,遍歷速度慢,執行效率低

如需要遍歷和組合,並且遍歷的過程中只需要讀取而不會更改,使用foreach循環最合適,反之,則根據需要,選擇其他循環(foreach, for)

C#基礎-數組與集合