Ruby 中什么样的 Hash 会相等?
为情所困
为情所困 2017-04-24 15:59:46
0
2
648
hash1 = {:one=>1,:two=>2}
hash2 = {:two=>2,:one=>1}
hash1 == hash2
=> true
assert_equal hash1, hash2
=> true
hash1.object_id == hash2.object_id
=> false

这个情况下hash1和hash2明显不是同一个对象为什么可以assert_equal?

hash = { "jim" => 53, "amy" => 20, "dan" => 23 }
new_hash = hash.merge({ "jim" => 54, "jenny" => 26 })
expected = { "jim" => 53, "amy" => 20, "dan" => 23, "jenny" => 26 }
expected == new_hash
=> false

这个情况下为什么expected和new_hash又不等了?

还有一个,求大神解释一下:

hash = Hash.new {|hash, key| hash[key] = [] }

这句话是什么意思?这个语法是怎么回事?三个hash一样么?

为情所困
为情所困

membalas semua(2)
伊谢尔伦

Kaedah

1, Hash#==, apabila dua cincang mempunyai bilangan pasangan nilai kunci yang sama, dan pasangan nilai kunci adalah sama mengikut kaedah #== mereka sendiri, maka dua cincang itu adalah sama

Penerangan:

  • :one=>1 ialah pasangan nilai kunci, :one ialah simbol, iaitu kunci, dan 1 ialah integer, iaitu nilai yang unik di peringkat global, iaitu , hanya ada satu :one, secara semula jadi Mereka adalah sama antara satu sama lain, 1 ialah integer, dan pertimbangan kesamaan juga sangat intuitif Dalam penilaian

  • dalam Ruby, kaedah
  • akan ditindih oleh subkelas untuk memberikan kesamaan semantik, seperti

    ialah #== Walau bagaimanapun, 1==1.0 adalah dilarang daripada mengatasi, dan objek perbandingan ialah true, iaitu Hanya objek yang sama ialah #equal?, seperti #object_id ialah equal.1.equal? 1.0false #equal? Kaedah

    2,
  • , seperti
, untuk kunci yang sama,

akan ditimpa oleh Hash#merge iaitu, h1.merge h2 ialah 54. Anda boleh membiarkan h1, jika anda mahu Nilai 🎜> Atau, seperti berikut h2

new_hash = hash.merge({"jim"=>54, "jenney"=>26}) {|key, oldval, newval| oldval}
new_hash == expected  #=> true
new_hash["jim"]3, h2 merge h1 terutamanya berkaitan dengan nilai cincang yang harus dikembalikan apabila mengindeks kunci yang tidak wujud, seperti h1 Di sini, dalam ,

ialah Hash.new, iaitu memanggil objek, hash1['not_exist_key'] ialah |hash, key| Maksud pernyataan ini ialah apabila kunci yang tidak wujud diindeks, tatasusunan kosong hash dikembalikan. Cara yang lebih mudah untuk menulisnya ialah hash1.key

刘奇

jangkaan dan new_hash tidak sama kerana satu jim ialah 53 dan satu lagi jim ialah 54!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan