Arrays Powershell阵列-加入前获取上下索引值
我解析了两个PowerShell对象:$Table1和$Table2。 解析表1时,我得到一个Timestamp:$Timestamp,我需要在表2中找到两个最接近的值Arrays Powershell阵列-加入前获取上下索引值,arrays,powershell,indexing,find,mergesort,Arrays,Powershell,Indexing,Find,Mergesort,我解析了两个PowerShell对象:$Table1和$Table2。 解析表1时,我得到一个Timestamp:$Timestamp,我需要在表2中找到两个最接近的值 $Table2 looks like this: Price TimeStamp ----- ---------------- 0.0597 1542056680.72746 0.0584 1542056650.34414 0.0555 1542056197.46668 0.0551 1542
$Table2 looks like this:
Price TimeStamp
----- ----------------
0.0597 1542056680.72746
0.0584 1542056650.34414
0.0555 1542056197.46668
0.0551 1542056167.28967
$TimeStamp = 1542056303
$Table2 is already sorted by TimeStamp
我的目标是有效地恢复$Table2的上下索引(我问题的核心)。然后,我将在两个时间戳和两个价格之间进行线性插值,得到$Price的值
答案中不需要线性插值部分,这只是出于上下文目的
干杯
菲利普我会这样做:
$TimeStamp = 1542056303
# find closest before given timestamp
$Table2 | Where-Object { [int]$_.Timestamp -gt $TimeStamp } | Select-Object -Last 1
# find closest after given timestamp
$Table2 | Where-Object { [int]$_.Timestamp -lt $TimeStamp } | Select-Object -First 1
我会这样做:
$TimeStamp = 1542056303
# find closest before given timestamp
$Table2 | Where-Object { [int]$_.Timestamp -gt $TimeStamp } | Select-Object -Last 1
# find closest after given timestamp
$Table2 | Where-Object { [int]$_.Timestamp -lt $TimeStamp } | Select-Object -First 1
在我看来,如果存储行,则不需要索引
- 迭代表并检查当前值是否小于或等于$TimeStamp
- 如果不是,则将当前行存储为$Upper
- 如果
将行存储为$Lower并断开foreach-le
样本输出
Price TimeStamp
----- ---------
0.0584 1542056650.34414
0.0555 1542056197.46668
Do your interpolation
在我看来,如果存储行,则不需要索引
- 迭代表并检查当前值是否小于或等于$TimeStamp
- 如果不是,则将当前行存储为$Upper
- 如果
将行存储为$Lower并断开foreach-le
样本输出
Price TimeStamp
----- ---------
0.0584 1542056650.34414
0.0555 1542056197.46668
Do your interpolation
很好!谢谢我想使用索引来获得更好的性能,但这里的问题不太多:-)效果很好!谢谢我想使用索引来获得更好的性能,但这并不是太大的问题:-)由于表是按降序排序的,因此必须交换
-lt
-gt
,否则将得到最早和最晚的条目,而不是最近的条目。由于表是按降序排序的,你必须交换-lt
-gt
,否则你会得到第一个和最后一个条目,而不是最近的条目。