1. 程式人生 > 其它 >C#中物件陣列,IEnumerable、ICollection、IList、List 資料集合 非0的有效資料按照排序方式排序,為0的放到最後

C#中物件陣列,IEnumerable、ICollection、IList、List 資料集合 非0的有效資料按照排序方式排序,為0的放到最後

思路為力扣的某一道演算法題 :283. 移動零 - 力扣(LeetCode) (leetcode-cn.com)

但是在處理集合元素為引用型別的資料時,需要注意陣列是引用型別 ,陣列元素改變的時候是引用地址(記憶體地址)的變化,

參考解釋:C# 當陣列引數引用傳遞 new 解惑 - 蜉蝣撼天 - 部落格園 (cnblogs.com)

程式碼示例:

   //測試類
    public class ScoreRecord
    {
        public int Score { get; set; }
        public string Name { get; set; }
    }
    
//處理程式碼 public static ScoreRecord[] MoveZero(ScoreRecord[] nums) { int zeroNum = 0;//用來計算0的個數 for (int i = 0; i < nums.Length; i++) { if (nums[i].Score == 0) { zeroNum++; }
else { //將nums[i] 跟前zersNum個交換 //並且將nums[i] 賦值為0 if (zeroNum != 0) { var _temp = nums[i]; ScoreRecord item = new ScoreRecord { Score
= _temp.Score, Name = _temp.Name, }; nums[i - zeroNum] = item; nums[i].Score = 0; } } } return nums; }
//前提,非0資料為有序資料
            ScoreRecord[] scoreRecords = new ScoreRecord[]
             {
                new ScoreRecord{Score=0,Name="小李"},
                new ScoreRecord{Score=12,Name="小白"},
                new ScoreRecord{Score=56,Name="小黑"},
                new ScoreRecord{Score=80,Name="小明"},
                new ScoreRecord{Score=99,Name="小紅"},
                new ScoreRecord{Score=0,Name="小花"},
             };
            Console.WriteLine("原始:");
            for (int i = 0; i < scoreRecords.Length; i++)
            {
                Console.WriteLine($"{scoreRecords[i].Score},{scoreRecords[i].Name}");
            }
            Console.WriteLine();
            Console.WriteLine();
            var newArr = MoveZero(scoreRecords);
            Console.WriteLine("處理後:");
            for (int i = 0; i < newArr.Length; i++)
            {
                Console.WriteLine($"{newArr[i].Score},{newArr[i].Name}");
            }
            Console.ReadKey();

結果: