php 편집기 Xinyi가 시간 범위 내에서 배열 요소를 표준화하는 방법을 소개합니다. 개발 중에는 시계열 데이터를 처리해야 하는 경우가 많으며, 이러한 데이터에는 시간이 흐르거나 누락되는 상황이 있을 수 있습니다. 데이터의 정확성과 완전성을 보장하려면 배열의 요소를 표준화해야 합니다. 정규화는 배열의 요소를 시간순으로 배치하고 누락된 시점을 채웁니다. 아래에서는 이 기능을 구현하는 방법을 자세히 설명합니다.
시간 범위에 걸쳐 요소 배열을 정규화하려고 합니다. 2022년 1월 1일에 20건의 은행 거래가 발생했다고 가정해 보겠습니다.
으아악발생 날짜 외에는 데이터가 없지만 하루 중 한 시간을 할당하고 싶으므로 결과는 다음과 같습니다.
으아악In go에는 요소 배열의 인덱스에 대한 하루 중 시간의 정규화를 계산하는 함수가 있습니다.
으아악그런데 2022/1/1 00:00부터 2022/1/1 23:59까지의 시간 범위에서 4요소 배열의 인덱스 0에서 실수로 2022/1/1 05:59를 계산했는데, 대신 제가 예상한 대로였습니다. 2022년 1월 1일 00:00을 참조하세요. 이러한 조건에서 올바르게 작동하는 유일한 것은 인덱스 3입니다.
그럼 정규화에 내가 뭘 잘못하고 있는 걸까요?
@icza가 수정한 기능입니다
으아악예: 시작 날짜와 종료 날짜가 2022/01/01 00:00
- 2022/01/01 00:03
,我们的银行交易数组中有 3 个条目,我们希望获取第 3 号交易的标准化时间(数组中的 2
):
시작 시간과 종료 시간 사이의 정규화된 시간(00:00
到 00:03
),并且想要查找数组(大小 3
)中最后一个条目(索引 2
부터)은 4분뿐이므로 결과는 다음과 같습니다.
또는 범위의 마지막 순간, 즉 00:03
입니다.
재현 가능한 예는 다음과 같습니다. https://go.dev/play/p/ezwkqanv1at
은 n
点之间有 n-1
段。这意味着,如果您想在插值中包含 start
和 end
,则时间段数(即 delta
)为 arraysize - 1
에 있습니다.
또한, 그렇다면 1
添加到 index
,则结果不可能是 start
(您将跳过 00:00
).
올바른 알고리즘은 다음과 같습니다:
으아악go 놀이터에서 사용해 보세요.
또한 트랜잭션이 많은 경우(하루 중 분 단위로 정렬, 약 1,000개) 동일한 타임스탬프(동일한 시간 및 분)를 사용하는 여러 트랜잭션으로 쉽게 끝날 수 있습니다. 이를 방지하려면 초 또는 밀리초와 같이 분보다 작은 정밀도를 사용하세요.
으아악예, 이렇게 하면 타임스탬프 초가 반드시 0일 필요는 없지만 더 높은 거래량에 대해 서로 다른 고유한 타임스탬프를 갖게 됩니다.
거래가 하루에 몇 초(예: 86400)인 경우 이 "단위"를 완전히 제거하고 time.duration
자체(예: 나노초)를 사용할 수 있습니다. 이는 가장 많은 수의 거래에도 타임스탬프 고유성을 보장합니다:
100만 건의 거래로 테스트한 결과 처음 15개 시간 부분은 다음과 같습니다(초 미만 부분에서만 지연됨).
으아악이것을 go 놀이터에서 사용해 보세요.
위 내용은 시간 범위 내에서 배열 요소를 정규화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!