Feature #6118 » 000_ruby_hash_keys_of.patch
ChangeLog (working copy) | ||
---|---|---|
Mon Mar 27 01:20:05 2012 Sambasiva Rao Suda <sambasivarao@gmail.org>
|
||
* hash.c (rb_hash_keys_of): Adding new method Hash#keys_of(value),
|
||
which will return array having all the keys of the given value.
|
||
[ruby-dev:45310][Feature #6118]
|
||
Mon Mar 26 23:43:04 2012 Shugo Maeda <shugo@ruby-lang.org>
|
||
* lib/net/ftp.rb (parse227, parse228, parse229): don't use $~.
|
hash.c (working copy) | ||
---|---|---|
return args[1];
|
||
}
|
||
static int
|
||
keys_of_i(VALUE key, VALUE value, VALUE ary)
|
||
{
|
||
VALUE arg = rb_ary_entry(ary, 0);
|
||
if (rb_equal(value, arg)) {
|
||
rb_ary_push(ary, key);
|
||
}
|
||
return ST_CONTINUE;
|
||
}
|
||
/*
|
||
* call-seq:
|
||
* hsh.keys_of(value) -> [key]
|
||
*
|
||
* Returns the keys of a given value. If the value is
|
||
* not found, returns <code>[]</code>.
|
||
*
|
||
* h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300}
|
||
* h.key(200) #=> ["b"]
|
||
* h.key(300) #=> ["c", "d"]
|
||
* h.key(999) #=> []
|
||
*
|
||
*/
|
||
static VALUE
|
||
rb_hash_keys_of(VALUE hash, VALUE value)
|
||
{
|
||
VALUE ary;
|
||
ary = rb_ary_new();
|
||
rb_ary_push(ary, value);
|
||
rb_hash_foreach(hash, keys_of_i, ary);
|
||
rb_ary_shift(ary);
|
||
return ary;
|
||
}
|
||
/* :nodoc: */
|
||
static VALUE
|
||
rb_hash_index(VALUE hash, VALUE value)
|
test/ruby/test_hash.rb (working copy) | ||
---|---|---|
def setup
|
||
@cls = Hash
|
||
@h = @cls[
|
||
1 => 'one', 2 => 'two', 3 => 'three',
|
||
1 => 'one', 2 => 'two', 3 => 'three', 4 => 'two'
|
||
self => 'self', true => 'true', nil => 'nil',
|
||
'nil' => nil
|
||
]
|
||
... | ... | |
assert_equal(nil, @cls[].key('gumby'))
|
||
end
|
||
def test_keys_of
|
||
assert_equal([1], @h.keys_of('one'))
|
||
assert_equal([2, 4], @h.keys_of('two'))
|
||
assert_equal([], @h.keys_of('nil'))
|
||
assert_equal([], @h.keys_of('gumby'))
|
||
assert_equal([], @cls[].keys_of('gumby'))
|
||
end
|
||
def test_values_at
|
||
res = @h.values_at('dog', 'cat', 'horse')
|
||
assert(res.length == 3)
|