Массивы Powershell - получение верхнего и нижнего значения индекса перед присоединением - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть два объекта PowerShell, которые я анализирую: $ Table1 и $ Table2. Анализируя таблицу 1, я получаю метку времени: $ 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.

Линейная интерполяция в ответе не требуется, это только для целей контекста.

Приветствия

Philippe

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Похоже, вам не нужен индекс, если вы храните строку.

  • перебирает таблицу и проверяет, является ли текущее значение меньше или равно $ TimeStamp
  • если не сохранить текущую строку как $ Upper
  • если -le сохранить строку как $ Lower и прервать foreach

## Q:\Test\2018\11\13\SO_53279995.ps1

$TimeStamp = 1542056303
$table2 = Import-Csv '.\table2.csv' | Sort-Object TimeStamp -Descending
$Upper = $Null
$Lower = $Null

ForEach ($Row in $table2){
    if([Double]$Row.TimeStamp -le $TimeStamp){
        $Lower = $Row
        Break
    } else {
        $Upper = $Row
    }
}
If ($Upper -and $Lower){
    $Upper
    $Lower
    "Do your interpolation"
} else {
    "can't evaluate nearest values"
}

Пример вывода

Price  TimeStamp
-----  ---------
0.0584 1542056650.34414
0.0555 1542056197.46668
Do your interpolation
0 голосов
/ 13 ноября 2018

Я бы сделал это так:

$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
...