迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

C# 中的数组切片

作者:迹忆客 最近更新:2024/01/03 浏览次数:

本教程将介绍在 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 的值。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中将 Long 转换为整数

发布时间:2024/01/03 浏览次数:68 分类:编程语言

有两种主要方法可用于将长变量转换为 C# 中的整数变量,即类型转换方法和 Convert.ToInt32()函数。

在 C# 中将 Int 转换为十六进制

发布时间:2024/01/03 浏览次数:156 分类:编程语言

ToString()函数可用于将整数值转换为十六进制字符串,而 Convert.ToInt32()函数可用于将十六进制字符串转换为 C# 中的整数值。

在 C# 中读取 JSON 文件

发布时间:2024/01/03 浏览次数:146 分类:编程语言

Json.net 命名空间内的 JsonConvert 类可用于在 C# 中对 JSON 文件执行读取和写入操作。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便