C# 中的陣列切片

Muhammad Maisam Abbas 2023年1月30日 2021年4月29日
  1. C# 中使用 Linq 方法進行陣列切片
  2. 使用 C# 中的 ArraySegment 類進行陣列切片
  3. 用 C# 中的擴充套件函式對陣列進行切分
C# 中的陣列切片

本教程將介紹在 C# 中切片陣列的方法。

C# 中使用 Linq 方法進行陣列切片

將陣列切成更小的子陣列的過程稱為陣列切分。Linq 用於將查詢功能與 C# 中的資料結構整合在一起。Linq 的 Take(x) 函式從資料結構的開始複製 x 個元素。以下程式碼示例向我們展示瞭如何使用 C# 中的 Linq 切片陣列。

using System;
using System.Linq;

namespace array_slicing
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] foo = {"one", "two", "three", "four", "five" };

            string[] bar = foo.Take(2).ToArray();
            foreach(var e in bar)
            {
                Console.WriteLine(e);
            }
        }
    }
}

輸出:

one
two

我們初始化了字串 foo 的陣列,並將其切成另一個字串陣列 bar,其中包含 foo 陣列的前兩個元素。此方法非常有限,因為我們只能使用此方法對陣列的起始元素進行切片。

使用 C# 中的 ArraySegment 類進行陣列切片

在 C# 中,ArraySegment用來將一個陣列切成一個子陣列。ArraySegment 類的構造方法將要分割的陣列,起始索引和要分割的元素數量提供給我們一個子陣列。下面的程式碼示例向我們展示瞭如何使用 C# 中的 ArraySegment 類對陣列進行切片。

using System;
using System.Linq;

namespace array_slicing
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] a = { "one", "two", "three", "four", "five" };
            var segment = new ArraySegment<string>(a, 2, 3);
            foreach (var s in segment)
            {
                Console.WriteLine(s);
            }
        }
    }
}

輸出:

three
four
five

我們初始化了字串 a 的陣列,並將其切成一個子陣列 segment,該子陣列包含 3 個元素,這些元素從 a 陣列的索引 2 開始,並帶有 ArraySegment 類的建構函式。這是一種更好的方法,因為我們可以使用這種方法從中間對陣列進行切片。

用 C# 中的擴充套件函式對陣列進行切分

擴充套件方法使我們可以在不宣告自定義資料型別的情況下向現有資料型別新增函式。我們還可以定義使用者定義的擴充套件方法而不是用在 C# 中切片陣列的內建方法。此擴充套件方法可以獲取切片的開始和結束索引,並返回此範圍內的子陣列。以下程式碼示例向我們展示瞭如何定義擴充套件函式以在 C# 中對陣列進行切片。

using System;
using System.Collections.Generic;

namespace iterate_through_a_list
{
    public static class Extensions
    {
        public static T[] Slice<T>(this T[] source, int start, int end)
        {
        if (end < 0)
        {
            end = source.Length + end;
        }
        int len = end - start;

        T[] res = new T[len];
        for (int i = 0; i < len; i++)
        {
            res[i] = source[i + start];
        }
        return res;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string[] values = { "one", "two", "three", "four", "five" };
            string[] slice = values.Slice(2, 4);
            foreach (var s in slice)
            {
                Console.WriteLine(s);
            }
        }
    }
}

輸出:

three
four
five

我們建立了一個擴充套件方法 Slice(),該方法採用切片的開始和結束索引並返回切片的子陣列。我們初始化了字串 values 的陣列,並將其切成陣列 slice,其中包含值從 values 陣列的索引 2 到索引 4 的值。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相關文章 - Csharp Array