我想从列表中获取一个子列表并对其执行操作。并且结果应该应用于主列表
var myNumber = new List<int>() { 1, 5, 9, 7, 2, 8, 2 };
var subNumbers = myNumber.GetRange(2, 4); // { 9, 7, 2, 8 }
for (int i = 0; i < subNumbers.Count; i++)
{
subNumbers[i] = (int)Math.Pow(subNumbers[i], 2); // {81, 49, 4, 64 }
}
// For example, applied to 'myNumbers'
WriteLine(string.Join(", ", myNumbers)); // I want the output to be: { 1, 5, 81, 49, 4, 64, 2 }
Run Code Online (Sandbox Code Playgroud)
您可以使用CollectionsMarshal.AsSpan<T>(List<T> list)。
var myNumber = new List<int>() { 1, 5, 9, 7, 2, 8, 2 };
var subNumbers = CollectionsMarshal.AsSpan(myNumber).Slice(2, 4);
for (int i = 0; i < subNumbers.Length; i++)
{
subNumbers[i] = (int)Math.Pow(subNumbers[i], 2)
}
Run Code Online (Sandbox Code Playgroud)
MSDN 页面有警告:
使用
List<T>时不得添加或移除物品。Span<T>
请务必注意该警告!如果您从 中添加项目,则List<T>后备数组可能会被重新分配,并且 将会Span<T>指向 不再使用的内存List<T>。如果您删除 视图中的项目Span<T>,则Span<T>不会更新以排除已删除的项目,并且可能仍包含它们。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |