2017-06-19 27 views
1

試想一下,我已經有了一個doulbe兩個數組稱爲一個C#如何從一個陣列轉換一定範圍到另一個

我想從採取一部分(範圍),適用於一些功能,以在該部分的每一個元素和把結果保存到的一部分(範圍)。

我知道如何使用C++使用std :: transform來實現它。

但是對於C#呢?

P.S. 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 

回答

2

您可以使用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(); 

我不得不只覆蓋一個僅使用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); 
+0

略好於我,因爲我的大腦放屁並沒有使用Select來填充原始數組。 lol – Steve

+0

問題是:** B **充滿了我需要的數據,我只能用** A **的一部分覆蓋** B **的一部分。 我明白了,如何用** Skip **和** Take **來提取範圍。現在,如何覆蓋** dst **的一部分,而不是創建一個新的** dst **? – Lionishy

+0

我懂了!謝謝! – Lionishy

1
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)); 
     } 
    } 
} 

代碼的最後一行是您真正要求的代碼,Skip將跳過第一個12,Take使用下一個12,並且Select執行您要求的轉換。

+0

儘管此代碼片段可能會解決問題,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – gunr2171

相關問題