提交 c7a37c10 编写于 作者: T Todd Bealmear

Add Enumerable#without

上级 e1e2b54e
* Added `#without` on `Enumerable` and `Array` to return a copy of an
enumerable without the specified elements.
*Todd Bealmear*
* Fixed a problem where String#truncate_words would get stuck with a complex
string.
......
......@@ -113,4 +113,16 @@ def split(value = nil)
results
end
end
# Returns a copy of the Array without the specified elements.
#
# people = ["David", "Rafael", "Aaron", "Todd"]
# people.without "Aaron", "Todd"
# => ["David", "Rafael"]
#
# Note: This is an optimization of `Enumerable#without` that uses `Array#-`
# instead of `Array#reject` for performance reasons.
def without(*elements)
self - elements
end
end
......@@ -60,6 +60,17 @@ def many?
def exclude?(object)
!include?(object)
end
# Returns a copy of the enumerable without the specified elements.
#
# ["David", "Rafael", "Aaron", "Todd"].without "Aaron", "Todd"
# => ["David", "Rafael"]
#
# {foo: 1, bar: 2, baz: 3}.without :bar
# => {foo: 1, baz: 3}
def without(*elements)
reject { |element| element.in?(elements) }
end
end
class Range #:nodoc:
......
......@@ -103,4 +103,11 @@ def test_exclude?
assert_equal true, GenericEnumerable.new([ 1 ]).exclude?(2)
assert_equal false, GenericEnumerable.new([ 1 ]).exclude?(1)
end
def test_without
assert_equal [1, 2, 4], GenericEnumerable.new((1..5).to_a).without(3, 5)
assert_equal [1, 2, 4], (1..5).to_a.without(3, 5)
assert_equal [1, 2, 4], (1..5).to_set.without(3, 5)
assert_equal({foo: 1, baz: 3}, {foo: 1, bar: 2, baz: 3}.without(:bar))
end
end
......@@ -2182,6 +2182,17 @@ to_visit << node if visited.exclude?(node)
NOTE: Defined in `active_support/core_ext/enumerable.rb`.
### `without`
The method `without` returns a copy of an enumerable with the specified elements
removed:
```ruby
people.without("Aaron", "Todd")
```
NOTE: Defined in `active_support/core_ext/enumerable.rb`.
Extensions to `Array`
---------------------
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册