Rumah > Soal Jawab > teks badan
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一样么?
伊谢尔伦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
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.0
false
#equal?
Kaedah
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
怪我咯2017-04-24 16:01:46
jangkaan dan new_hash tidak sama kerana satu jim ialah 53 dan satu lagi jim ialah 54!