Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Powershell阵列-加入前获取上下索引值_Arrays_Powershell_Indexing_Find_Mergesort - Fatal编程技术网

Arrays Powershell阵列-加入前获取上下索引值

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

我解析了两个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 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
  • 如果
    -le
    将行存储为$Lower并断开foreach

样本输出

Price  TimeStamp
-----  ---------
0.0584 1542056650.34414
0.0555 1542056197.46668
Do your interpolation

在我看来,如果存储行,则不需要索引

  • 迭代表并检查当前值是否小于或等于$TimeStamp
  • 如果不是,则将当前行存储为$Upper
  • 如果
    -le
    将行存储为$Lower并断开foreach

样本输出

Price  TimeStamp
-----  ---------
0.0584 1542056650.34414
0.0555 1542056197.46668
Do your interpolation

很好!谢谢我想使用索引来获得更好的性能,但这里的问题不太多:-)效果很好!谢谢我想使用索引来获得更好的性能,但这并不是太大的问题:-)由于表是按降序排序的,因此必须交换
-lt
-gt
,否则将得到最早和最晚的条目,而不是最近的条目。由于表是按降序排序的,你必须交换
-lt
-gt
,否则你会得到第一个和最后一个条目,而不是最近的条目。