在C#中选择数组中的项目范围

mou*_*iec 29 .net c# arrays

我想在一系列项目中选择一系列项目.例如,我有1000个项目的数组,我想"提取"项目100到200并将它们放在另一个数组中.

你能帮我解决这个问题吗?

Mar*_*ell 67

var dest = source[100..200];
Run Code Online (Sandbox Code Playgroud)

或手动:

var dest = source.Skip(100).Take(100).ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 我发现使用 `source[100..200]` 语法排除范围中最后一项的 C# 语法不直观。具体来说,OP要求提取第100到200项,其中应包括第200项,即总共101项。@MarcGravell 的解决方案排除了第 200 项。 (5认同)
  • @julianbechtold 它也已经过时 9 年了;C# 8 将范围和基于索引的操作添加为一等公民;我将更新示例,但使用您的 python 示例或 `myArray[100:200]`,在 C# 8 中是 `myArray[100..200]` (4认同)
  • @MarcGravell 对我来说, array[1..10] 创建一个带有数据副本的新数组(似乎是 RuntimeHelpers.GetSubArray() 的语法简写)似乎很奇怪;而 span[1..10] 在该跨度上获取一个切片(并且是 .Slice() 的简写)。我想这是由于遗留原因造成的,但对我来说,感觉它没有通过“最不惊讶的测试”。 (2认同)