的編號。 string[] employeeIDs = { "12345", "67890", "98765" }; string[,] c = { };// 宣告二維字串陣列(多維陣列) //實際應用:員工資訊(包含員工們的編號、姓名、性別、年齡、職位、薪資、權限等)。 string[,] employeeInfo = { { "小明", "12345", "男", "25", "工程師", "50000", "管理" }, {"小華", "67890", "女", "30", "設計師", "60000", "行政" } }; string[][] d = { };//宣告不規則陣列 //實際應用:此大樓內的公司有幾間分公司、幾間辦公室、幾間廠房、幾間廚房、幾間休息室、幾間教室等等。 //如何應對不同需求使用不同的工具來放置資料? string[][] buildingInfo = new string"> 的編號。 string[] employeeIDs = { "12345", "67890", "98765" }; string[,] c = { };// 宣告二維字串陣列(多維陣列) //實際應用:員工資訊(包含員工們的編號、姓名、性別、年齡、職位、薪資、權限等)。 string[,] employeeInfo = { { "小明", "12345", "男", "25", "工程師", "50000", "管理" }, {"小華", "67890", "女", "30", "設計師", "60000", "行政" } }; string[][] d = { };//宣告不規則陣列 //實際應用:此大樓內的公司有幾間分公司、幾間辦公室、幾間廠房、幾間廚房、幾間休息室、幾間教室等等。 //如何應對不同需求使用不同的工具來放置資料? string[][] buildingInfo = new string"> 的編號。 string[] employeeIDs = { "12345", "67890", "98765" }; string[,] c = { };// 宣告二維字串陣列(多維陣列) //實際應用:員工資訊(包含員工們的編號、姓名、性別、年齡、職位、薪資、權限等)。 string[,] employeeInfo = { { "小明", "12345", "男", "25", "工程師", "50000", "管理" }, {"小華", "67890", "女", "30", "設計師", "60000", "行政" } }; string[][] d = { };//宣告不規則陣列 //實際應用:此大樓內的公司有幾間分公司、幾間辦公室、幾間廠房、幾間廚房、幾間休息室、幾間教室等等。 //如何應對不同需求使用不同的工具來放置資料? string[][] buildingInfo = new string">
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;

namespace _20240903
{

    internal class Program
    {
        static void P0_複習昨日作業()
        {
            string a = "字串變數";
            //實際應用:員工編號
            string employeeID = "12345";

            string[] b = { "一維的字串陣列", "字串陣列", "這是另一個字串" };
            //實際應用:員工<們>的編號。
            string[] employeeIDs = { "12345", "67890", "98765" };

            string[,] c = { };// 宣告二維字串陣列(多維陣列)
            //實際應用:員工資訊(包含員工們的編號、姓名、性別、年齡、職位、薪資、權限等)。
            string[,] employeeInfo = {
                { "小明", "12345", "男", "25", "工程師", "50000", "管理" },
                {"小華", "67890", "女", "30", "設計師", "60000", "行政" }
            };

            string[][] d = { };//宣告不規則陣列
            //實際應用:此大樓內的公司有幾間分公司、幾間辦公室、幾間廠房、幾間廚房、幾間休息室、幾間教室等等。
            //如何應對不同需求使用不同的工具來放置資料?
            string[][] buildingInfo = new string[2][];
            buildingInfo[0] = new string[3] { "一號公司", "辦公室一號", "辦公室二號" };
            buildingInfo[1] = new string[4] { "二號公司", "辦公室三號", "辦公室四號", "天臺" };
            //A大樓有一號公司與二號公司兩間,一號公司內有兩間辦公室(辦公室一號、辦公室二號)
            //上面有一個問題,一號二號公司不應該跟辦公室放在一起。    

            //一樣都是Length,不同物件呼叫時也會有不同表示
            Console.WriteLine("呼叫string變數長度:" + employeeID.Length); //5,因為字串變數裡有5個字元
            Console.WriteLine("呼叫陣列長度:" + employeeIDs.Length);//3,因為陣列裡有3個元素
            Console.WriteLine("呼叫二維陣列的列數:" + employeeInfo.GetLength(0));//2,因為二維陣列有2列
            Console.WriteLine("呼叫不規則陣列的列數:" + buildingInfo.Length);//2,因為不規則陣列有2個元素(兩個陣列)

        }

        static void P1_練習_計算收入()
        // 希望產生的結果如圖所示,請協助計算各區營業所的收入
        // "台北", "台中", "高雄"
        // "點心部", "飲料部", "小吃部", "文具部"

        {
            //宣告地區
            string[] areas = { "台北", "台中", "高雄","其他" }; //宣告地區,台北為0、台中為1、高雄為2
            //宣告業務項目
            string[] businessItems = { "點心部", "飲料部", "小吃部", "文具部" };
            //宣告各區營業收入
            int[][] businessIncome = new int[4][];//三個地區的營業收入
            businessIncome[0] = new int[3] { 1100, 2200, 3300, };//台北的營業收入
            businessIncome[1] = new int[2] { 2200, 4400 };//台中的營業收入
            businessIncome[2] = new int[4] { 1000, 2000, 3000, 4000 };//高雄的營業收入
            businessIncome[3] = new int[4] { 3200,4120,5000,2420};//其他的營業收入

            //輸出各區營業收入表格
            //輸出表格標題(依照業務項目順序)
            for (int i = 0; i < businessItems.Length; i++)//列印業務項目標題,依序為點心部、飲料部、小吃部、文具部
            {
                //第一格留空
                Console.Write("\\t"+businessItems[i]);
            }
            Console.WriteLine("\\n--------------------------------------------");

            //輸出各地區營業收入
            for (int i = 0; i < areas.Length; i++)//先列印地區(不換行),內部for迴圈列印各業務項目(換行)
            {
                Console.Write(areas[i] + "\\t");//列印地區名稱

                for (int k = 0; k < businessIncome[i].Length; k++) //列印各業務項目收入(不換行)
                {
                    Console.Write(businessIncome[i][k] + "\\t");
                }
                Console.WriteLine();//結束迴圈(地區+業務項目)後換行
            }
             Console.WriteLine("\\n--------------------------------------------");

            //計算各區總營業收入
            int[] totalIncome = new int[areas.Length];//總營業收入
            
            for (int i = 0; i < areas.Length; i++)//依照地區分隔後計算總營業收入
            {
                for (int k = 0; k < businessIncome[i].Length; k++)
                {
                    totalIncome[i] += businessIncome[i][k];//總營業收入加總各地區各業務項目收入
                }
            }

            //輸出總營業收入
            Console.WriteLine("總營業收入:");
            for (int i = 0; i < areas.Length; i++)
            {
                //將金額添加三位一點的逗點
                string totalIncomeStr = totalIncome[i].ToString("N0");//將總營業收入轉換為字串,並添加三位一點的逗點
                Console.WriteLine(areas[i] + "總金額:NT$" + totalIncomeStr);
            }
            Console.WriteLine("\\n--------------------------------------------");
            //計算各業務項目總營業收入
            int[] totalBusinessIncome = new int[areas.Length];//總營業收入
            for (int i = 0; i < areas.Length; i++)//依照地區分隔後計算總營業收入
            {
                for (int k = 0; k < businessIncome[i].Length; k++)
                {
                    totalBusinessIncome[k] += businessIncome[i][k];//總營業收入加總各地區各業務項目收入
                }
            }

            //輸出總營業收入
            Console.WriteLine("\\n各業務項目總營業收入:");
            for (int i = 0; i < businessItems.Length; i++)
            {
                //將金額添加三位一點的逗點
                string totalBusinessIncomeStr = totalBusinessIncome[i].ToString("N0");//將總營業收入轉換為字串,並添加三位一點的逗點
                Console.WriteLine(businessItems[i] + "總金額:NT$" + totalBusinessIncomeStr);
            }
        }

        static void P2_清單和清單方法() {
            // 結構: List<資料型態>  變數名稱 = new List<資料型態>();
            // 討論如何取得資料、刪除資料、修改資料
            List<int> aaaaa = new List<int>();
            aaaaa.Add(01);
            aaaaa.Add(02);
            aaaaa.Add(03);
            aaaaa.Add(04);
            aaaaa.Add(05);
            aaaaa.Add(06);
            aaaaa.Add(07);
            aaaaa.Add(08);
            aaaaa.Add(09);
            //如何取得?方法一:
            Console.WriteLine(aaaaa[0] + "," + aaaaa[1]);
            //如何取得?方法二 for:
            for (int i = 0; i < aaaaa.Count; i++)//使用List時不使用Length,而是使用Count
            {
                Console.Write("for方法:"+aaaaa[i] + ",\\n");
            }
            //如何取得?方法三 foreach:
            foreach (int item in aaaaa)
            {
                Console.Write("foreach方法:"+item + ",\\n");
            }
            //如何取得?方法四 join:
            Console.WriteLine("join方法:\\n" + string.Join(",\\n", aaaaa.ToArray()));

            //要記得List要變更之前,一定要先Add,不然會超過範圍。
            //  string              a   ->  ""
            //  string[]            b  ->  new or {}                    ->[]                    
            //  string[ , ]         c   ->  new or {}                   ->[.]
            //  string[ ][ ]        d  ->  new  -> new or {}    ->[][]
            //------------------------------------------------------
            //List< >               e ->  new -> add()            ->呼叫 Add()方法
            //arrayList             f  ->  new 
            //如何刪除資料?
            aaaaa.Remove(08);  //刪除指定值
            aaaaa.RemoveAt(1);     //刪除指定索引值(刪除第2個)
            aaaaa.RemoveAll(x => x > 9);//刪除指定條件的資料(大於3000的)
            //刪除完後,List的長度會減少,但索引值不會變化。
            aaaaa.RemoveRange(4, 2);   //刪除指定範圍的資料(從0開始,刪除2筆)
            Console.WriteLine("刪除後的List:" + string.Join(",\\n", aaaaa.ToArray()));

            //aaaaa.Clear();         //清空整個List
        }

        static void P3_討論陣列和清單()
        {
            // 陣列和清單的差異
            // 陣列:
            // 固定大小,且只能存放特定型別的資料
            //多維陣列:
            // 固定大小的二維陣列,但可以存放不同型別的資料
            //不規則陣列:
            //清單:
            //不固定大小與內容,可以存放不同型別的資料
        }

        static void P4_陣列清單()
        { 
            ArrayList arrayList = new ArrayList(); //宣告ArrayList,記得要引用System.Collections
            arrayList.Add(10);
            arrayList.Add("Hello");
            arrayList.Add(true);
            arrayList.Add(3.14);
            arrayList.Add(new DateTime(2021, 1, 1));
            //arrayList.Add(null); //null值也能存入ArrayList
            Console.WriteLine(arrayList[0]);
            Console.WriteLine(arrayList[1]);
            Console.WriteLine(arrayList[2]);

            //方法二 for:
            for (int i = 0; i < arrayList.Count; i++)//使用ArrayList時不使用Length,而是使用Count
            {
                Console.Write("for方法:" + arrayList[i] + ",\\n");
            }
            //方法三 foreach:
            foreach (object item in arrayList) //這邊用var或者object都可以
            {
                Console.Write("foreach方法:" + item + ",\\n");
            }
            //方法四 join:
            Console.WriteLine("join方法:\\n" + string.Join(",\\n", arrayList.ToArray()));//轉換成陣列再用join,因為不可以單純呼叫不轉換
        
            arrayList.Remove(10);//刪除指定值
            arrayList.RemoveAt(1);//刪除指定索引值(刪除第2個)
            arrayList.RemoveRange(1, 2);//刪除指定範圍的資料(從2開始,刪除2筆)
            

            arrayList.Clear(); //清空ArrayList
        
        }
        

        static void Main(string[] args)
        {
            //P0_複習昨日作業();
            //P1_練習_計算收入();
            //P2_清單和清單方法();
            //P3_討論陣列和清單();
            P4_陣列清單();
        }
    }
}