summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-05-09 11:59:28 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-05-09 11:59:28 +0900
commita9488618ced0001f4f76480f3668ac00c996d446 (patch)
tree9aec19f51070b88dc30542beee972d86be8d2046
parent0b23d10a965fba7a58404a43c6369e2361388881 (diff)
parentdc4c042df5466287764bf46377ca9baa6690f198 (diff)
downloadmruby-a9488618ced0001f4f76480f3668ac00c996d446.tar.gz
mruby-a9488618ced0001f4f76480f3668ac00c996d446.zip
Merge pull request #2213 from suzukaze/add-hash.key
Add Hash#key
-rw-r--r--mrbgems/mruby-hash-ext/mrblib/hash.rb20
-rw-r--r--mrbgems/mruby-hash-ext/test/hash.rb9
2 files changed, 29 insertions, 0 deletions
diff --git a/mrbgems/mruby-hash-ext/mrblib/hash.rb b/mrbgems/mruby-hash-ext/mrblib/hash.rb
index a5f04e5e1..259b0fa12 100644
--- a/mrbgems/mruby-hash-ext/mrblib/hash.rb
+++ b/mrbgems/mruby-hash-ext/mrblib/hash.rb
@@ -160,4 +160,24 @@ class Hash
end
self
end
+
+ ##
+ # call-seq:
+ # hsh.key(value) -> key
+ #
+ # Returns the key of an occurrence of a given value. If the value is
+ # not found, returns <code>nil</code>.
+ #
+ # h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300 }
+ # h.key(200) #=> "b"
+ # h.key(300) #=> "c"
+ # h.key(999) #=> nil
+ #
+
+ def key(val)
+ self.each do |k, v|
+ return k if v == val
+ end
+ nil
+ end
end
diff --git a/mrbgems/mruby-hash-ext/test/hash.rb b/mrbgems/mruby-hash-ext/test/hash.rb
index 1334522ff..b9992fa96 100644
--- a/mrbgems/mruby-hash-ext/test/hash.rb
+++ b/mrbgems/mruby-hash-ext/test/hash.rb
@@ -102,3 +102,12 @@ assert("Hash#keep_if") do
h = { 1 => 2, 3 => 4, 5 => 6 }
assert_equal({ 1 => 2, 3=> 4, 5 =>6} , h.keep_if { true })
end
+
+assert("Hash#key") do
+ h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300, nil => 'nil', 'nil' => nil }
+ assert_equal "b", h.key(200)
+ assert_equal "c", h.key(300)
+ assert_nil h.key(999)
+ assert_nil h.key('nil')
+ assert_equal 'nil', h.key(nil)
+end