3 mins read

IdSet di Julia 1.11 | beragampengetahuan.com – Beragampengetahuan

Oleh: Blog Bogumił Kamiński

Diposting ulang dari:

Kami saat ini berada dalam tahap RC1 Julia 1.11.
Sebuah tambahan kecil tapi penting yang dibuatnya IdSet semacam publisitas.
Hari ini saya ingin membahas kapan tipe ini berguna.

Kode telah diuji pada Julia 1.11 RC1.

Ada tiga cara dasar untuk menguji kesetaraan di Julia:

  1. itu == operator;
  2. itu isequal fungsi;
  3. itu === operator.

Saya telah mengurutkan operator perbandingan ini berdasarkan tingkat keketatannya.

Itu == Operatornya adalah yang terbaik longgar. Ini mungkin kembali true, false atau missing. Itu missing nilai dikembalikan jika ada nilai perbandingan yang hilang (atau mengandung rekursi missing nilai). Untuk bilangan floating point, diasumsikan demikian 0.0 setara -0.0 dan itu NaN Tidak sama NaN. Mari kita lihat kasus terakhir dalam tindakan karena mungkin akan mengejutkan jika Anda belum pernah melihat ini sebelumnya:

Berikutnya adalah isequal yang lebih ketat. Dijamin akan kembali lagi true atau false. Ini menangani semua floating point NaN nilai yang sama, diproses -0.0 sebagai tidak sama dengan 0.0Dan missing sama dengan missing. Ia membandingkan benda-benda berdasarkan nilainya, bukan berdasarkan identitasnya. Jadi, misalnya, dua vektor berbeda dengan isi yang sama dianggap sama:

julia> v1 = [1, 2, 3]
3-element Vector{Int64}:
 1
 2
 3

julia> v2 = [1, 2, 3]
3-element Vector{Int64}:
 1
 2
 3

julia> isequal(v1, v2)
true

Akhirnya kita punya ===, yang mana yang paling ketat. Itu kembali true atau false. Namun, true dikembalikan jika dan hanya jika nilai yang dibandingkan tidak dapat dibedakan. Mereka harus dari tipe yang sama. Jika tipenya identik, objek yang dapat diubah dibandingkan berdasarkan alamat di memori, dan objek yang tidak dapat diubah (seperti angka) dibandingkan berdasarkan konten pada tingkat bit. Karena itu v1 Dan v2 vektor yang kita buat di atas tidak sama jika dibandingkan ===:

Anda bisa bertanya tentang NaN. Kami melihat apa yang kami bicarakan sebelumnya. Di sini situasinya sangat rumit. Mereka mungkin setara atau mungkin tidak setara. Dari NaN nilainya tidak dapat diubah === membandingkannya pada tingkat bit. Jadi kita punya:

julia> Float16(NaN) == Float32(NaN)
false

julia> isequal(Float16(NaN), Float32(NaN))
true

julia> Float16(NaN) === Float32(NaN)
false

julia> Float16(NaN) == Float16(NaN)
false

julia> isequal(Float16(NaN), Float16(NaN))
true

julia> Float16(NaN) === Float16(NaN)
true

Jadi, Anda harus berhati-hati. Masing-masing dari tiga metode perbandingan yang telah saya diskusikan mempunyai kegunaannya masing-masing dan layak untuk dipelajari.

Set standar di Julia, dibuat menggunakan Set menggunakan konstruktor isequal untuk memeriksa kesetaraan. Jadi kita punya:

julia> Set([v1, v2])
Set{Vector{Int64}} with 1 element:
  [1, 2, 3]

Kami melihatnya v1 Dan v2 telah dihapus duplikatnya karena persamaannya isequal karena isinya sama. Ini biasanya yang diinginkan pengguna.

Namun, terkadang kita ingin melacak objek sebenarnya (apa pun isinya). Hal ini sangat penting ketika bekerja dengan struktur yang bisa berubah. Pada kasus ini IdSet sangat berguna:

julia> IdSet{Vector{Int}}([v1, v2])
IdSet{Vector{Int64}} with 2 elements:
  [1, 2, 3]
  [1, 2, 3]

Perhatikan bahwa kita perlu menentukan tipe penyimpanan nilai IdSet. Sebagai pengecualian IdSet() diperbolehkan (tidak mengharuskan Anda meneruskan spesifikasi tipe objek yang disimpan) dan dalam hal ini kosong IdSet{Any} telah dibuat.

Sekarang Anda mungkin bertanya kapan harus berlatih IdSet paling berguna. Saya paling sering membutuhkannya dalam praktik pengkodean ketika saya bekerja dengan wadah bersarang yang mungkin berisi referensi melingkar. Dalam kasus seperti itu gunakan IdSet memungkinkan Anda dengan mudah melacak daftar objek yang dapat berubah yang terlihat dan menghindari loop tak terbatas atau stack overflow jika Anda menggunakan rekursi untuk bekerja dengan struktur data yang sangat bertumpuk.

Contents

Software Terbaru Saat Ini



Aplikasi yang sedang trend saat ini

object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming

#IdSet #Julia #beragampengetahuan.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *