Jadual Kandungan
Kandungan soalan
Editor:
Penyelesaian
Rumah pembangunan bahagian belakang Golang Bagaimana untuk menormalkan elemen tatasusunan dalam julat masa?

Bagaimana untuk menormalkan elemen tatasusunan dalam julat masa?

Feb 08, 2024 pm 09:30 PM
susunan

Bagaimana untuk menormalkan elemen tatasusunan dalam julat masa?

editor php Xinyi memperkenalkan anda cara menyeragamkan elemen tatasusunan dalam julat masa. Dalam pembangunan, kami selalunya perlu memproses data siri masa, dan data ini mungkin mempunyai lonjakan masa atau situasi yang hilang. Untuk memastikan ketepatan dan kesempurnaan data, kita perlu menyeragamkan elemen dalam tatasusunan. Normalisasi meletakkan elemen tatasusunan dalam susunan kronologi dan mengisi titik masa yang hilang. Di bawah, kami akan memperincikan cara melaksanakan ciri ini.

Kandungan soalan

Saya cuba menormalkan susunan elemen dalam julat masa. Katakan anda mempunyai 20 transaksi bank yang berlaku pada 1 Januari 2022

transaction  1 - 2022/01/01
transaction  2 - 2022/01/01
...
transaction 20 - 2022/01/01
Salin selepas log masuk

Kami tidak mempunyai data selain daripada tarikh ia berlaku, tetapi kami masih mahu memberikannya satu jam dalam sehari, jadi mereka akhirnya menjadi:

transaction  1 - 2022/01/01 00:00
transaction  2 - 2022/01/01 ??:??
...
transaction 20 - 2022/01/01 23:59
Salin selepas log masuk

In go saya mempunyai fungsi yang cuba mengira normalisasi masa dalam sehari untuk indeks dalam susunan elemen:

func normal(start, end time.time, arraysize, index float64) time.time {
    delta := end.sub(start)
    minutes := delta.minutes()

    duration := minutes * ((index+1) / arraysize)

    return start.add(time.duration(duration) * time.minute)
}
Salin selepas log masuk

Walau bagaimanapun, saya secara tidak sengaja mengira 2022/1/1 05:59 pada indeks 0 dalam tatasusunan 4 elemen dalam julat masa dari 2022/1/1 00:00 hingga 2022/1/1 23:59, sebaliknya, saya menjangkakan Lihat 1/1/2022 00:00. Satu-satunya yang berfungsi dengan betul di bawah syarat ini ialah indeks 3.

Jadi, apa yang saya buat salah dengan normalisasi?

Editor:

Ini adalah fungsi yang ditetapkan oleh @icza

func timeindex(min, max time.time, entries, position float64) time.time {
    delta := max.sub(min)
    minutes := delta.minutes()

    if position < 0 {
        position = 0
    }

    duration := (minutes * (position / (entries - 1)))

    return min.add(time.duration(duration) * time.minute)
}
Salin selepas log masuk

Ini contoh: Katakan tarikh mula dan tamat kami ialah 2022/01/01 00:00 - 2022/01/01 00:03,我们的银行交易数组中有 3 个条目,我们希望获取第 3 号交易的标准化时间(数组中的 2):

result := timeindex(time.date(2022, time.january, 1, 0, 0, 0, 0, time.utc), time.date(2022, time.january, 1, 0, 3, 0, 0, time.utc), 3, 2)
Salin selepas log masuk

Memandangkan hanya ada 4 minit masa normal (dari 00:0000:03),并且想要查找数组(大小 3)中最后一个条目(索引 2) antara masa mula dan masa tamat, keputusannya ialah:

fmt.Printf("%t", result.Equal(time.Date(2022, time.January, 1, 0, 3, 0, 0, time.UTC))
// prints "true"
Salin selepas log masuk

atau minit terakhir dalam julat, iaitu 00:03.

Berikut ialah contoh yang boleh dihasilkan semula: https://go.dev/play/p/ezwkqanv1at

Penyelesaian

ada dalam n 点之间有 n-1 段。这意味着,如果您想在插值中包含 startend,则时间段数(即 delta)为 arraysize - 1.

Juga, jika mahu 1 添加到 index,则结果不可能是 start (您将跳过 00:00).

Jadi algoritma yang betul ialah ini:

func normal(start, end time.time, arraysize, index float64) time.time {
    minutes := end.sub(start).minutes()

    duration := minutes * (index / (arraysize - 1))

    return start.add(time.duration(duration) * time.minute)
}
Salin selepas log masuk

Cubalah di pergi taman permainan.

Juga ambil perhatian bahawa jika anda mempunyai banyak transaksi (dipesan mengikut minit sehari, kira-kira seribu) anda boleh dengan mudah berakhir dengan berbilang transaksi dengan cap masa yang sama (jam dan minit yang sama). Jika anda ingin mengelakkan perkara ini, gunakan ketepatan yang lebih kecil daripada minit, seperti saat atau milisaat:

func normal(start, end time.time, arraysize, index float64) time.time {
    sec := end.sub(start).seconds()

    duration := sec * (index / (arraysize - 1))

    return start.add(time.duration(duration) * time.second)
}
Salin selepas log masuk

Ya, ini akan menghasilkan detik cap masa yang tidak semestinya sifar sama ada, tetapi akan memastikan volum transaksi yang lebih tinggi mempunyai cap masa yang berbeza dan unik.

Jika transaksi anda mengikut urutan saat sehari (iaitu 86400), maka anda boleh mengalih keluar "unit" ini sepenuhnya dan menggunakan time.duration itu sendiri (iaitu nanosaat). Ini akan menjamin keunikan cap masa walaupun untuk jumlah transaksi terbesar:

func normal(start, end time.time, arraysize, index float64) time.time {
    delta := float64(end.sub(start))

    duration := delta * (index / (arraysize - 1))

    return start.add(time.duration(duration))
}
Salin selepas log masuk

Menguji ini dengan 1 juta urus niaga, berikut ialah 15 bahagian masa pertama (ia hanya ditangguhkan dalam bahagian subsaat):

0 - 00:00:00.00000
1 - 00:00:00.08634
2 - 00:00:00.17268
3 - 00:00:00.25902
4 - 00:00:00.34536
5 - 00:00:00.43170
6 - 00:00:00.51804
7 - 00:00:00.60438
8 - 00:00:00.69072
9 - 00:00:00.77706
10 - 00:00:00.86340
11 - 00:00:00.94974
12 - 00:00:01.03608
13 - 00:00:01.12242
14 - 00:00:01.20876
15 - 00:00:01.29510
16 - 00:00:01.38144
17 - 00:00:01.46778
18 - 00:00:01.55412
19 - 00:00:01.64046
Salin selepas log masuk

Cuba ini di pergi taman permainan.

Atas ialah kandungan terperinci Bagaimana untuk menormalkan elemen tatasusunan dalam julat masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah sepuluh platform perdagangan mata wang maya? Apakah sepuluh platform perdagangan mata wang maya? Feb 20, 2025 pm 02:15 PM

Dengan populariti kriptografi, platform perdagangan mata wang maya telah muncul. Sepuluh platform perdagangan mata wang maya teratas di dunia disenaraikan seperti berikut mengikut jumlah transaksi dan bahagian pasaran: Binance, Coinbase, FTX, Kucoin, Crypto.com, Kraken, Huobi, Gate.io, Bitfinex, Gemini. Platform ini menawarkan pelbagai perkhidmatan, dari pelbagai pilihan cryptocurrency untuk perdagangan derivatif, sesuai untuk peniaga yang berbeza -beza.

Cara menyesuaikan pertukaran terbuka bijan ke dalam bahasa Cina Cara menyesuaikan pertukaran terbuka bijan ke dalam bahasa Cina Mar 04, 2025 pm 11:51 PM

Bagaimana cara menyesuaikan pertukaran terbuka bijan ke bahasa Cina? Tutorial ini merangkumi langkah -langkah terperinci mengenai komputer dan telefon bimbit Android, dari penyediaan awal hingga proses operasi, dan kemudian menyelesaikan masalah biasa, membantu anda dengan mudah menukar antara muka pertukaran terbuka ke Cina dan cepat memulakan dengan platform perdagangan.

Apakah platform mata wang digital yang selamat dan boleh dipercayai? Apakah platform mata wang digital yang selamat dan boleh dipercayai? Mar 17, 2025 pm 05:42 PM

Platform mata wang digital yang selamat dan boleh dipercayai: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6 Coinbase, 7. Kucoin, 8 crypto.com, 9. Bitfinex, 10. Keselamatan, kecairan, yuran pengendalian, pemilihan mata wang, antara muka pengguna dan sokongan pelanggan harus dipertimbangkan ketika memilih platform.

10 platform perdagangan cryptocurrency teratas, sepuluh aplikasi platform perdagangan mata wang yang disyorkan 10 platform perdagangan cryptocurrency teratas, sepuluh aplikasi platform perdagangan mata wang yang disyorkan Mar 17, 2025 pm 06:03 PM

Sepuluh platform perdagangan cryptocurrency teratas termasuk: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8 crypto.com, 9. Keselamatan, kecairan, yuran pengendalian, pemilihan mata wang, antara muka pengguna dan sokongan pelanggan harus dipertimbangkan ketika memilih platform.

10 platform perdagangan mata wang maya teratas 2025 Aplikasi Perdagangan Cryptocurrency Kedudukan Sepuluh Teratas 10 platform perdagangan mata wang maya teratas 2025 Aplikasi Perdagangan Cryptocurrency Kedudukan Sepuluh Teratas Mar 17, 2025 pm 05:54 PM

Sepuluh Platform Perdagangan Mata Wang Maya 2025: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6 Coinbase, 7. Kucoin, 8. Crypto.com, 9. Keselamatan, kecairan, yuran pengendalian, pemilihan mata wang, antara muka pengguna dan sokongan pelanggan harus dipertimbangkan ketika memilih platform.

Antara aplikasi Perdagangan Mata Wang Maya yang manakah yang terbaik? Antara aplikasi Perdagangan Mata Wang Maya yang manakah yang terbaik? Mar 19, 2025 pm 05:00 PM

10 Perdagangan Perdagangan Mata Wang Maya Top: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6 Coinbase, 7. Kucoin, 8 crypto.com, 9. Bitfinex, 10. Keselamatan, kecairan, yuran pengendalian, pemilihan mata wang, antara muka pengguna dan sokongan pelanggan harus dipertimbangkan ketika memilih platform.

Aplikasi Perisian Mata Wang Maya Selamat yang Disyorkan Top 10 Aplikasi Perdagangan Mata Wang Digital Ranking 2025 Aplikasi Perisian Mata Wang Maya Selamat yang Disyorkan Top 10 Aplikasi Perdagangan Mata Wang Digital Ranking 2025 Mar 17, 2025 pm 05:48 PM

Disyorkan Aplikasi Perisian Mata Wang Maya Selamat: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8 crypto.com, 9. Bitfinex, 10. Keselamatan, kecairan, yuran pengendalian, pemilihan mata wang, antara muka pengguna dan sokongan pelanggan harus dipertimbangkan ketika memilih platform.

Panduan Pengajaran Analisis Teknikal: Tingkah Laku Harga Melalui K-Line Panduan Pengajaran Analisis Teknikal: Tingkah Laku Harga Melalui K-Line Mar 05, 2025 am 08:54 AM

Jadual Kandungan Pengenalan (i) Laluan Pembelajaran (ii) Unsur-unsur Utama Perdagangan Jenis 1. Tafsiran Tingkah Laku Harga K-Line (i) Konsep Asas (ii) Alat Analisis 2 Strategi mengatasi selepas analisis trend terobosan Ringkasan Tahap Sokongan Talian Trend dan Tahap Tekanan Harga Kunci Pengenalan Tahap Tekanan

See all articles