C#如何:将范围从一个数组转换为另一个数组

C#如何:将范围从一个数组转换为另一个数组,c#,c++,C#,C++,假设我有两个名为A和B的doulbe数组 我想从a中选取一个部分(范围),对该部分中的每个元素应用一些函数,并将结果保存到B的部分(范围) 我知道如何用C++来实现它,使用 STD::Trime>/P> 但C#怎么办 附:使用C++编写的代码: double *src = new double[100]; double *dst = new double[24]; std::generate(src,src+100,[]() { return 0.25; } ); std::generate(

假设我有两个名为ABdoulbe数组

我想从a中选取一个部分(范围),对该部分中的每个元素应用一些函数,并将结果保存到B的部分(范围)

我知道如何用C++来实现它,使用<强> STD::Trime>/P> 但C#怎么办

附:使用C++编写的代码:

double *src = new double[100];
double *dst = new double[24];

std::generate(src,src+100,[]() { return 0.25; } );
std::generate(dst,dst+24,[]() { return 1.0; } );

std::transform(src+12,src+24,dst+12, [](double d) { return d*d*sqrt(d); } );

delete[] src;
delete[] dst;

enter code here

您可以使用LINQ进行转换。由于您将在最后删除
dst
,并在转换期间将其完全填充,因此无需写入现有数组:

var src = Enumerable.Range(0, 100).Select(_ => 0.25).ToArray();
var dst = src.Skip(12).Take(12).Select(d => d*d*Math.Sqrt(d)).ToArray();
我只能用a的一部分覆盖B的一部分

如果需要覆盖现有条目,请使用
CopyTo
方法:

var src = Enumerable.Range(0, 100).Select(_ => 0.25).ToArray();
var dst = new double[50];
src.Skip(12).Take(12).Select(d => d*d*Math.Sqrt(d)).ToList().CopyTo(dst, 31);
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
var src=新列表();
对于(int i=0;i<100;i++)
src.Add(0.25D);
var dst=src.Skip(12).Take(12).Select(d=>d*d*Math.Sqrt(d));
}
}
}

最后一行代码是您真正需要的,Skip将跳过前12行,Take使用下12行,Select将完成您要求的转换。

比我的稍好一点,因为我大脑放屁了,没有使用Select填充原始数组。LOL问题是:B中充满了我需要的数据,我只能用a的一部分覆盖B的一部分。我明白了,如何用Skip和Take提取范围。现在,如何覆盖dst的一部分,而不是制作新的dst?我知道了!谢谢虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var src = new List<double>();

            for (int i = 0; i < 100; i++)
                src.Add(0.25D);

            var dst = src.Skip(12).Take(12).Select(d => d * d * Math.Sqrt(d));
        }
    }
}