探索C#中陣列取得子陣列的多種方法

前言

在寫題目 LeetCode #2966 Divide Array Into Arrays With Max Difference 依最大值的差異分割陣列為多個陣列 時遇到的,順便就做個筆記吧~

題目中,需要在從陣列特定索引取得接下來的三個元素組成子陣列

寫的時候,一直忘記能用什麼語法,但又不想用傳統的 for 一個一個組,故記錄下來以防再次忘記

解決方法

以下的範例就都用從 startIdx開始取cnt個元素組成子陣列

方法 1 – 最傳統的for loop

int[] tmp = new int[cnt];
for (int i = 0; i < cnt; i++)
{
    tmp[i] = nums[startIdx + i];
}

最傳統的作法,不只要先定義好陣列的數量,還要用迴圈一個一個去設定索引值

方法 2 – LINQ – SKIP、 Take

int[] tmp = nums.Skip(startIdx).Take(cnt).ToArray();

應該是有在使用C#開發的大家最熟悉的語法了吧,可以一行輕鬆地達成。

方法 3 – Range運算子

int[] tmp = nums[startIdx..(startIdx+cnt)];

不過除了LINQ外,在C# 8.0時引入了 Range運算子,讓整件事變得更輕鬆了~

Range運算子甚至可以搭配 ^ (end 運算子)達到更多操作,例如: nums[startIdx..^3] ➡ 取nums陣列 startIdx到倒數第三個元素組成子陣列


結論

做個紀錄,以防哪天突然變成金魚,全部忘光光!

如果之後有發現其他做法,會再來更新的~

最近正在奴役GPT幫我做日文版的翻譯文章,希望可以吸引一些其他流量

參考資料

🧡希望這篇文章有提供一點幫助~

🧡幫我點一個小小的廣告或留言,都是對我的支持!

⭐如有任何疑問,歡迎透過留言或messenger讓我知道 !

🍽️另外,徵求任何合作機會(不管是業配、廣告或是友站連結)

看看一些其他的筆記吧

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *