配列全体の反復量を最適化するタスクがあります。最適化配列操作
Iは、ソース配列を有する:0-NO特徴、1
int[] dataArray = new int[10] {0, 1, 1, 1, 0, 0, 0, 0, 1, 0};
- 機能存在します。 この
public struct MyDataStruct
{
public int Index; //index in array
public int Value; //some value
}
はまた、いくつかの機能のreprezentationの2つの方法があります。理想的に私はONLY OptimizedKeyValueArray1を使用するとNotOptimizedKeyValueArray1のすべてusingsを削除する必要があります。私はresultArray、inputArrayと同じ量を持っている必要があり、結果として
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)
};
:
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]);
}
また、このタスクを実行するために、アレイ上でより効率的なアルゴリズムを提案することもできます。ありがとう。
使用し、このLINQ文のint [] inputArray2 = inputArray.Where(項目=>項目== 1).ToArray() ;要件ごとに4つのアイテムしか得られず、ループを実行する – rashfmnb
linqはありません。使用できません。 – yozhik
この宿題はありますか?有効な値だけを反復処理したい場合は、配列をfeatureflagでソートする必要があります。その後、単純な終了条件である無効な機能にヒットするまで、配列を繰り返し処理できます。 –