Rumah >pembangunan bahagian belakang >Golang >Pencincangan rentetan dalam Kotlin dan Golang

Pencincangan rentetan dalam Kotlin dan Golang

WBOY
WBOYke hadapan
2024-02-06 10:12:12701semak imbas

Kotlin 和 Golang 中的字符串散列

Kandungan soalan

Dalam perkhidmatan saya mempunyai rentetan yang dicincang seperti ini:

fun string.tohash(): long {
    var hashcode = this.hashcode().tolong()
    if (hashcode < 0l) {
        hashcode *= -1
    }
    return hashcode
}

Saya ingin meniru kod ini dalam perkhidmatan b yang ditulis dalam golang, jadi untuk perkataan yang sama saya mendapat cincangan yang sama. Setakat yang saya faham daripada dokumentasi kotlin, cincang yang digunakan mengembalikan integer 64-bit. Oleh itu, saya melakukan ini:

func hash(s string) int64 {
    h := fnv.new64()
    h.write([]byte(s))
    v := h.sum64()
    return int64(v)
}

Tetapi saya tidak mendapat nilai yang sama semasa melakukan ujian unit. Saya dapat:

func test_hash(t *testing.t) {
    tests := []struct {
        input  string
        output int64
    }{
        {input: "papafritas", output: 1079370635},
    }
    for _, test := range tests {
        got := hash(test.input)
        assert.equal(t, test.output, got)
    }
}

Hasil:

7841672725449611742

Adakah saya melakukan sesuatu yang salah?


Jawapan betul


Java dan Kotlin menggunakan fungsi cincang yang berbeza daripada Go.

Pilihan yang mungkin adalah:

  1. Menggunakan fungsi cincang standard.
  2. Laksanakan semula Kod cincang Java untuk rentetan dalam Go.

Atas ialah kandungan terperinci Pencincangan rentetan dalam Kotlin dan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam