是否可以有一個指向 C# 中其他陣列的陣列?
double[] arr1 = new double[2]{1,2};
double[] arr2 = new double[2]{3,4};
double[] mergedArr = arr1 arr2; //of course not working like that, but how to do it right?
那么當我更改 arr1 中的值時,mergedArray 中的值會自動更改嗎?
uj5u.com熱心網友回復:
你可以做這樣的事情使用Span<T>或Memory<T>
var arr = new double[]{1, 2, 3, 4};
var span1= arr.AsSpan(0, 2);
var span2= arr.AsSpan(2, 2);
span2[0] = 5;
// arr is now {1, 2, 5, 4}
Span<T>作業有點像智能指標,可以讓您參考陣列內的記憶體。但是你必須從實際的陣列開始,并從中創建你的跨度,你不能“合并”陣列,因為它們是不同的物件并且將被放置在非連續記憶體中。
請注意,Spans 非常輕巧且便宜,但對如何使用它有一些限制,Memory<T>輕量級稍差但消除了一些限制,我建議閱讀檔案以避免任何意外。
uj5u.com熱心網友回復:
指向其他陣列-> 我認為這是不可能的。沒有把握。您可以將陣列復制到新陣列。
double[] arr1 = new double[2]{1,2};
double[] arr2 = new double[2]{3,4};
double[] arr3 = new double[arr1.Length arr2.Length];
arr1.CopyTo(arr3, 0);
arr2.CopyTo(arr3 , arr1.Length);
uj5u.com熱心網友回復:
你應該使用IEnumerable,然后你可以使用 LINQConcat
IEnumerable<double> mergedArr = arr1.Concat(arr2);
這不會創建一個新物件,除非你ToArray呼叫ToList它
uj5u.com熱心網友回復:
我認為您要的是鋸齒狀陣列
double[] arr1 = new double[] {1, 2};
double[] arr2 = new double[] {3, 4};
double[][] jaggedArr = new double[][] { arr1, arr2};
可以通過jaggedArr[0][1]=> 第一個陣列(0 索引)和第二個元素(1 索引)訪問。
這將創建一個陣列陣列{ {1 ,2}, {3, 4} }
您可以手動填寫陣列陣列,從而為您提供更大的靈活性。例如
double[][] jaggedArr = new double[2][];
jaggedArr[0] = arr1;
jaggedArr[1] = arr2;
除非您想從連接在一起的兩個陣列的值(一個接一個)創建一個陣列。然后你做
double[] concatArr = arr1.Concat(arr2).ToArray();
這將創建一個帶有 values 的陣列{1,2,3,4}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/506466.html
上一篇:從C 中的函式回傳一個陣列
下一篇:如何在C中讀取并列印字串陣列?
