You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求兼容.NET SDK 3.1 LTS的C++ std::iota等效实现方案

兼容.NET 3.1 LTS的C++ std::iota等效实现

你需要将C++中使用std::iota生成固定步长递增序列的逻辑移植到.NET 3.1 LTS环境,以下是两种可直接落地的实现方案:

方案1:直接使用内置API(适用于生成新数组场景)

.NET 3.1内置的Enumerable.Range方法可以直接实现需求,对应你给出的C++示例,移植后的代码为:

// 等效于C++中生成从-4开始的10个递增int元素
int[] ar = Enumerable.Range(-4, 10).ToArray();

生成结果为{-4, -3, -2, -1, 0, 1, 2, 3, 4, 5},和C++版本完全一致。
该方案优势是无需自定义代码,性能和兼容性都有官方保障,仅限制生成int类型的序列

方案2:自定义扩展方法(适配修改现有集合、非int类型场景)

如果需要和std::iota一样支持填充现有集合的指定区间、或是生成long、float等其他数值类型的序列,可以自定义通用扩展方法:
首先定义扩展类:

using System.Collections.Generic;

public static class CollectionExtensions
{
    /// <summary>
    /// 功能等效于C++ std::iota,为集合指定区间依次填充递增的序列值
    /// </summary>
    /// <typeparam name="T">数值类型,支持自增操作</typeparam>
    /// <param name="collection">目标可写集合</param>
    /// <param name="startIndex">填充的起始索引</param>
    /// <param name="fillCount">需要填充的元素数量</param>
    /// <param name="initialValue">序列初始值</param>
    public static void Iota<T>(this IList<T> collection, int startIndex, int fillCount, T initialValue)
        where T : struct, System.IComparable<T>, System.IEquatable<T>
    {
        dynamic currentVal = initialValue;
        int endIndex = System.Math.Min(startIndex + fillCount, collection.Count);
        for (int i = startIndex; i < endIndex; i++)
        {
            collection[i] = currentVal++;
        }
    }
}

使用示例:

// 先创建长度为10的数组
int[] ar = new int[10];
// 从索引0开始填充10个元素,初始值为-4,完全等效于C++示例代码
ar.Iota(0, 10, -4);

该方案支持所有可自增的数值类型,可灵活适配各种自定义填充场景

内容的提问来源于stack exchange,提问作者Mizux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:27:05