C#中物件陣列,IEnumerable、ICollection、IList、List 資料集合 非0的有效資料按照排序方式排序,為0的放到最後
阿新 • • 發佈:2021-09-01
思路為力扣的某一道演算法題 :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();
結果: