給定兩個數組,我需要根據arrayA中的範圍(實際值)所在的位置從arrayB中提取值。如何使用上限和下限從數組中提取值?
Index 0 1 2 3 4 5 6 7 8 9 10 11 12
-------------------------------------------------------------
ArrayA = {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6}
ArrayB = {1, 0.2, 3, 4, 5, 6,5.5, 8, 9,11.1, 11, 12, 3}
考慮下列範圍內,我需要提取以下結果
RangeToExtract* IndexInArrayA Expected Values To Extract
-------------- ------------- --------------------------
0 -> 1 [0,2] 1,0.2,3
1 -> 3 [3,6] 4,5,6,5.5
3 -> 5 [7,10] 5.5,8,9,11.1,11
1 -> 5 [3,10] 4,5,6,5.5,8,9,11.1,11
3 -> 10 [7,12] 8,9,11.1,11,12,3
* Refers to the actual values in ArrayA
注:鑑於RangeToExtract (0->1
),確定在ArrayA指標,其中這些值,其結果是(0->1)
映射到[0,2]
(數值1在ArrayA中的位置2處)
我只計算出以下特殊情況存在(不確定是否有更多)
當上限不ArrayA存在- 下限爲等於零和
進一步信息:
- 兩個陣列將具有相同的尺寸
- ArrayA將始終進行排序
代碼:
private double[] GetRange(double lower, double upper)
{
var myList = new double[ArrayA.Length];
var lowerIndex = Array.IndexOf(ArrayA, lower);
var upperIndex = Array.IndexOf(ArrayA, upper);
// special case 1
if (lowerIndex != 0)
{
lowerIndex = lowerIndex + 1;
}
// special case 2
if (upperIndex == -1)
{
upperIndex = ArrayA.Length-1;
}
for (int i = lowerIndex; i <= upperIndex; i++)
{
myList[i] = ArrayB[i];
}
return myList;
}
鑑於上面的代碼,所有的特殊情況已被考慮到?有沒有更好的方式來編寫上面的代碼?
您還應該確保ArrayA中的值是唯一的IMO。 – Marco 2012-02-01 07:35:34
@Marco - 值將永遠是唯一的 – Ahmad 2012-02-01 07:36:36
ArrayA是否會被排序? ArrayB中的值是否總是1-N? – 2012-02-01 07:39:44