优化数组操作

时间:2016-03-28 20:48:48

标签: c# arrays list optimization

我的任务是优化数组迭代次数。

我有这样的源数组:

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

或许您可以在阵列上提出一些更有效的算法来完成这项任务。感谢。

1 个答案:

答案 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.
}