cari

Rumah  >  Soal Jawab  >  teks badan

Ruby 中什么样的 Hash 会相等?

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一样么?

为情所困为情所困2771 hari yang lalu642

membalas semua(2)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-24 16:01:46

    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

    balas
    0
  • 怪我咯

    怪我咯2017-04-24 16:01:46

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

    balas
    0
  • Batalbalas