【问题标题】:Selecting a range of items inside an array in C#在 C# 中选择数组内的一系列项目
【发布时间】:2011-03-08 23:56:31
【问题描述】:

我想在一个项目数组中选择一系列项目。 例如,我有一个包含 1000 个项目的数组,我想“提取”第 100 到 200 个项目并将它们放入另一个数组中。

你能帮我怎么做吗?

【问题讨论】:

  • 如果对您有帮助,请务必接受答案。

标签: c# .net arrays


【解决方案1】:

在 C# 8 中,范围运算符允许:

var dest = source[100..200];

(以及一系列其他开放式选项,从末尾开始计数等)

在此之前,LINQ 允许:

var dest = source.Skip(100).Take(100).ToArray();

或手动:

var dest = new MyType[100];
Array.Copy(source, 100, dest, 0, 100);
       // source,source-index,dest,dest-index,count

【讨论】:

  • @julianbechtold 它也已经过时了 9 年; C# 8 将基于范围和索引的操作添加为一等公民;我将更新示例,但在 C# 8 中使用您的 python 示例或myArray[100:200],即myArray[100..200]
  • 它也必须是一个核心应用程序。 dot net 4.8 不喜欢它,即使它是 C#9,缺少 System.Range 和 System.Index。
  • @MarcGravell 对我来说,array[1..10] 创建一个带有数据副本的新数组似乎很奇怪(并且似乎是 RuntimeHelpers.GetSubArray() 的语法简写);而 span[1..10] 在该跨度上获得一个切片(并且是 .Slice() 的简写)。我想这是由于遗留原因造成的,但对我来说,感觉它没有通过“最小惊讶测试”。
  • 我发现使用 source[100..200] 语法排除范围内最后一项的 C# 语法不直观。具体来说,OP要求提取项目100到200,其中应该包括项目200,即总共是101个项目。 @MarcGravell 的解决方案不包括第 200 项。
猜你喜欢
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2012-01-28
  • 1970-01-01
相关资源
最近更新 更多