[英]Is there a way to expand a one-dimensional Array into a 2D Array with the original values in the [0] index of the 2D Array in C#?
我有一个带有类别名称的数组,但是现在我需要为每个类别分配一些计数器。 有没有办法在C#中将我的1D数组扩展为2D数组?
感谢您的帮助!
编辑:
PerformanceCounterCategory[] categories;
categories = PerformanceCounterCategory.GetCategories();
string[] categoryNames = new string[categories.Length];
string[] categoryNames_en = new string[categories.Length];
for (int objX = 0; objX < categories.Length; objX++)
{
categoryNames[objX] = categories[objX].CategoryName;
}
Array.Sort(categoryNames);
for (int objX = 0; objX < categories.Length; objX++)
{
Console.WriteLine("{0,4} - {1}", objX + 1, categoryNames[objX]);
}
我有带有所有类别名称的数组categoryNames,但是在每个类别中,我都想以某种方式将一些计数器分配给它们的类别...
不幸的是,您不能使用Array.Copy,因为源数组和目标数组的维数不同。
此外,由于数组是使用固定大小初始化的,因此无法在C#中扩展数组。
您可以做的是创建一个具有第二个二元对数的新数组,然后复制值并将第二个维数设置为默认值。
void Main()
{
int[] sourceCollection = new [] {1,2,3,4,5,6,7} ;
var result = CopyArrayValues(sourceCollection, 2);
result.Dump();
}
//create a new 2d array
T[,] CopyArrayValues<T>(T[] DataSource, int SecondLength)
{
//Initialize the new array
var Target = new T[DataSource.Length, SecondLength];
//Copy values over
for (int i = 0; i < DataSource.Length; i++)
{
Target[i, 0] = DataSource[i];
}
return Target;
}
输出:
如果可以使用数组数组,则可以按照以下模式进行操作:
int[] sourceCollection = new[] { 1, 2, 3, 4, 5, 6, 7 };
int[][] arr = sourceCollection.Select(i => Enumerable.Range(i, 4).ToArray()).ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.