如何取出數組中符合某種條件的元素,然後放在數組最前面,即索引為0的位置?
思路大致如下:
→找到符合條件的數組元素,把之賦值給一個臨時變量temp,並記下該數組元素的索引位置,假設是index
→在源數組中,從索引為0的數組元素開始,拷貝index個數組元素到另外一個目標數組
→把臨時變量temp賦值給目標數組索引為0的位置
public static class ArrHelper{/// <summary>/// 對類型為T的數組進行擴展,把滿足條件的元素移動到數組的最前面/// </summary>/// <typeparam name="T"></typeparam>/// <param name="arr">源數組</param>/// <param name="match">lamda表達式</param>/// <returns></returns>public static bool MoveToFront<T>(this T[] arr, Predicate<T> match){//如果數組的長度為0if (arr.Length == 0){return false;}//獲取滿足條件的數組元素的索引var index = Array.FindIndex(arr, match);//如果沒有找到滿足條件的數組元素if (index == -1){return false;}//把滿足條件的數組元素賦值給臨時變量var temp = arr[index];Array.Copy(arr, 0, arr, 1, index);arr[0] = temp;return true;}public static void PrintArray<T>(T[] arr){foreach (var item in arr){Console.Write(item + " ");}Console.WriteLine();}}
以上,是針對泛型數組的擴展,所以可以直接使用數組實例調用擴展方法。
class Program{static void Main(string[] args){int[] intArr = new int[]{1, 2, 3, 4, 5};ArrHelper.PrintArray(intArr);intArr.MoveToFront(i => i == 3);ArrHelper.PrintArray(intArr);Console.ReadKey();}}