我的任务是优化数组迭代次数。
我有这样的源数组:
int[] dataArray = new int[10] {0, 1, 1, 1, 0, 0, 0, 0, 1, 0};
其中0-无特征,1 - 特征存在。 这个
public struct MyDataStruct
{
public int Index; //index in array
public int Value; //some value
}
还有两种表示某些功能的方法:理想情况下,我需要使用ONLY OptimizedKeyValueArray1并删除NotOptimizedKeyValueArray1的所有使用。
public static readonly MyDataStruct[] NotOptimizedKeyValueArray1 =
{
new MyDataStruct(0, -1),
new MyDataStruct(1, 1000),
new MyDataStruct(2, 2500),
new MyDataStruct(3, 4500),
new MyDataStruct(4, -1),
new MyDataStruct(5, -1),
new MyDataStruct(6, -1),
new MyDataStruct(7, -1),
new MyDataStruct(8, 6500),
new MyDataStruct(9, -1)
};
public static readonly MyDataStruct[] OptimizedKeyValueArray1 =
{
new MyDataStruct(1, 1000),
new MyDataStruct(2, 2500),
new MyDataStruct(3, 4500),
new MyDataStruct(8, 6500)
};
结果我需要有resultArray,数量与inputArray相同:
int[] inputArray = new int[10] {0, 1, 1, 1, 0, 0, 0, 0, 1, 0};
MyDataStruct[] resultDataSet = new MyDataStruct[10];
这是我对此任务的解决方案,但它没有经过优化,也没有可扩展性,因为我会迭代那些对我来说不重要的元素,而且我从一开始就知道它。结果我有10个元素:
for(int i = 0; i < dataArray.Length; i++)
{
resultDataSet[i] = new MyDataStruct(i, dataArray[i]);
}
但有些我需要提高效率,而不是迭代0值元素。但根据这段代码,我将只创建4个元素,而我需要有其他6个元素和一些默认值。而且我不知道如何更有效地做到这一点。
for(int i = 0; i < OptimizedKeyValueArray1.Length; i++)
{
int index = OptimizedKeyValueArray1.Index;
int value = OptimizedKeyValueArray1.Value;
resultDataSet[i] = new MyDataStruct(i, dataArray[i]);
}
或许您可以在阵列上提出一些更有效的算法来完成这项任务。感谢。
答案 0 :(得分:1)
不完全确定你的意思,有点不清楚如果你想使用NotOptimized数组或只是优化的数组,如果你可以从第一个数组获取元素,我就是这样做的:
const int arraySize = 10;
//No need int[] if only 0 & 1
bool[] dataArray = new bool[arraySize] {false, true, true, true, false, false, false, false, true, false};
List<MyDataStruct> resultDataSet = new List<MyDataStruct> ();
//You must iterate on all dataArray, no real way around it
for(int i = 0; i < arraySize; i++)
{
if (dataArray[i])
resultDataSet.Add(NotOptimizedKeyValueArray1[i]);
}
如果你必须有相同数量的元素,那么你应该使用另一个数组:
MyDataStruct[] resultDataSet = new MyDataStruct[arraySize];
for(int i = 0; i < arraySize; i++)
{
if (dataArray[i])
resultDataSet[i] = NotOptimizedKeyValueArray1[i];
else
resultDataSet[i] = new MyDataStruct(); //whatever your default is.
}