rbs 3.0.0.dev.2 → 3.0.0.dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +2 -1
- data/.github/workflows/ruby.yml +4 -0
- data/Gemfile.lock +11 -11
- data/Rakefile +2 -2
- data/Steepfile +1 -1
- data/core/array.rbs +573 -423
- data/core/basic_object.rbs +11 -39
- data/core/binding.rbs +1 -1
- data/core/builtin.rbs +8 -0
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +7 -18
- data/core/complex.rbs +2 -2
- data/core/data.rbs +419 -0
- data/core/dir.rbs +52 -104
- data/core/encoding.rbs +22 -181
- data/core/enumerable.rbs +212 -175
- data/core/enumerator/product.rbs +96 -0
- data/core/enumerator.rbs +57 -8
- data/core/errors.rbs +8 -2
- data/core/exception.rbs +41 -0
- data/core/fiber.rbs +95 -12
- data/core/file.rbs +840 -275
- data/core/file_test.rbs +34 -19
- data/core/float.rbs +40 -96
- data/core/gc.rbs +15 -3
- data/core/hash.rbs +113 -175
- data/core/integer.rbs +85 -145
- data/core/io/buffer.rbs +187 -60
- data/core/io/wait.rbs +28 -16
- data/core/io.rbs +1859 -1389
- data/core/kernel.rbs +525 -961
- data/core/match_data.rbs +306 -142
- data/core/math.rbs +506 -234
- data/core/method.rbs +0 -24
- data/core/module.rbs +110 -17
- data/core/nil_class.rbs +2 -0
- data/core/numeric.rbs +76 -144
- data/core/object.rbs +88 -212
- data/core/proc.rbs +17 -5
- data/core/process.rbs +22 -5
- data/core/ractor.rbs +1 -1
- data/core/random.rbs +20 -3
- data/core/range.rbs +91 -89
- data/core/rational.rbs +2 -3
- data/core/rbs/unnamed/argf.rbs +177 -120
- data/core/rbs/unnamed/env_class.rbs +89 -163
- data/core/rbs/unnamed/random.rbs +36 -12
- data/core/refinement.rbs +8 -0
- data/core/regexp.rbs +462 -272
- data/core/ruby_vm.rbs +210 -0
- data/{stdlib/set/0 → core}/set.rbs +43 -47
- data/core/string.rbs +1403 -1332
- data/core/string_io.rbs +191 -107
- data/core/struct.rbs +67 -63
- data/core/symbol.rbs +187 -201
- data/core/thread.rbs +40 -35
- data/core/time.rbs +902 -826
- data/core/trace_point.rbs +55 -6
- data/core/unbound_method.rbs +48 -24
- data/docs/collection.md +4 -0
- data/docs/syntax.md +55 -0
- data/ext/rbs_extension/parser.c +5 -6
- data/lib/rbs/cli.rb +6 -1
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +3 -1
- data/lib/rbs/collection/config/lockfile_generator.rb +16 -14
- data/lib/rbs/collection/config.rb +1 -1
- data/lib/rbs/collection/sources/git.rb +9 -2
- data/lib/rbs/collection/sources/local.rb +79 -0
- data/lib/rbs/collection/sources.rb +8 -1
- data/lib/rbs/environment.rb +6 -5
- data/lib/rbs/environment_loader.rb +3 -2
- data/lib/rbs/errors.rb +18 -0
- data/lib/rbs/locator.rb +26 -7
- data/lib/rbs/sorter.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/sig/collection/sources.rbs +32 -3
- data/sig/environment.rbs +2 -3
- data/sig/locator.rbs +14 -2
- data/sig/shims/{abstract_syntax_tree.rbs → _abstract_syntax_tree.rbs} +0 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -13
- data/stdlib/cgi/0/core.rbs +16 -0
- data/stdlib/coverage/0/coverage.rbs +50 -8
- data/stdlib/csv/0/csv.rbs +1 -1
- data/stdlib/date/0/date.rbs +856 -726
- data/stdlib/date/0/date_time.rbs +83 -210
- data/stdlib/erb/0/erb.rbs +13 -36
- data/stdlib/etc/0/etc.rbs +127 -20
- data/stdlib/fileutils/0/fileutils.rbs +1290 -381
- data/stdlib/logger/0/logger.rbs +466 -316
- data/stdlib/net-http/0/net-http.rbs +2211 -534
- data/stdlib/nkf/0/nkf.rbs +5 -5
- data/stdlib/objspace/0/objspace.rbs +31 -14
- data/stdlib/openssl/0/openssl.rbs +11 -7
- data/stdlib/optparse/0/optparse.rbs +20 -17
- data/stdlib/pathname/0/pathname.rbs +21 -4
- data/stdlib/pstore/0/pstore.rbs +378 -154
- data/stdlib/pty/0/pty.rbs +24 -8
- data/stdlib/ripper/0/ripper.rbs +1650 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -15
- data/stdlib/socket/0/socket.rbs +36 -3
- data/stdlib/strscan/0/string_scanner.rbs +7 -5
- data/stdlib/tempfile/0/tempfile.rbs +104 -44
- data/stdlib/time/0/time.rbs +2 -2
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/generic.rbs +2 -2
- data/stdlib/yaml/0/yaml.rbs +2 -2
- data/stdlib/zlib/0/zlib.rbs +1 -1
- metadata +8 -6
- data/core/deprecated.rbs +0 -9
- data/sig/shims/ripper.rbs +0 -8
data/core/array.rbs
CHANGED
|
@@ -1,80 +1,127 @@
|
|
|
1
1
|
# <!-- rdoc-file=array.c -->
|
|
2
2
|
# An Array is an ordered, integer-indexed collection of objects, called
|
|
3
|
-
# *elements*.
|
|
3
|
+
# *elements*. Any object (even another array) may be an array element, and an
|
|
4
|
+
# array can contain objects of different types.
|
|
4
5
|
#
|
|
5
6
|
# ## Array Indexes
|
|
6
7
|
#
|
|
7
8
|
# Array indexing starts at 0, as in C or Java.
|
|
8
9
|
#
|
|
9
10
|
# A positive index is an offset from the first element:
|
|
11
|
+
#
|
|
10
12
|
# * Index 0 indicates the first element.
|
|
11
13
|
# * Index 1 indicates the second element.
|
|
12
14
|
# * ...
|
|
13
15
|
#
|
|
14
16
|
#
|
|
15
17
|
# A negative index is an offset, backwards, from the end of the array:
|
|
18
|
+
#
|
|
16
19
|
# * Index -1 indicates the last element.
|
|
17
20
|
# * Index -2 indicates the next-to-last element.
|
|
18
21
|
# * ...
|
|
19
22
|
#
|
|
20
23
|
#
|
|
21
|
-
# A non-negative index is *in range* if it is smaller than the size
|
|
22
|
-
# array. For a 3-element array:
|
|
24
|
+
# A non-negative index is *in range* if and only if it is smaller than the size
|
|
25
|
+
# of the array. For a 3-element array:
|
|
26
|
+
#
|
|
23
27
|
# * Indexes 0 through 2 are in range.
|
|
24
28
|
# * Index 3 is out of range.
|
|
25
29
|
#
|
|
26
30
|
#
|
|
27
|
-
# A negative index is *in range* if its absolute value is not larger
|
|
28
|
-
# size of the array. For a 3-element array:
|
|
31
|
+
# A negative index is *in range* if and only if its absolute value is not larger
|
|
32
|
+
# than the size of the array. For a 3-element array:
|
|
33
|
+
#
|
|
29
34
|
# * Indexes -1 through -3 are in range.
|
|
30
35
|
# * Index -4 is out of range.
|
|
31
36
|
#
|
|
32
37
|
#
|
|
38
|
+
# Although the effective index into an array is always an integer, some methods
|
|
39
|
+
# (both within and outside of class Array) accept one or more non-integer
|
|
40
|
+
# arguments that are [integer-convertible
|
|
41
|
+
# objects](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
|
|
42
|
+
#
|
|
33
43
|
# ## Creating Arrays
|
|
34
44
|
#
|
|
35
45
|
# You can create an Array object explicitly with:
|
|
36
46
|
#
|
|
37
|
-
# * An [array literal](
|
|
47
|
+
# * An [array literal](rdoc-ref:literals.rdoc@Array+Literals):
|
|
48
|
+
#
|
|
49
|
+
# [1, 'one', :one, [2, 'two', :two]]
|
|
38
50
|
#
|
|
51
|
+
# * A [%w or %W: string-array
|
|
52
|
+
# Literal](rdoc-ref:literals.rdoc@25w+and+-25W-3A+String-Array+Literals):
|
|
39
53
|
#
|
|
40
|
-
#
|
|
54
|
+
# %w[foo bar baz] # => ["foo", "bar", "baz"]
|
|
55
|
+
# %w[1 % *] # => ["1", "%", "*"]
|
|
41
56
|
#
|
|
42
|
-
# *
|
|
57
|
+
# * A [%i pr %I: symbol-array
|
|
58
|
+
# Literal](rdoc-ref:literals.rdoc@25i+and+-25I-3A+Symbol-Array+Literals):
|
|
43
59
|
#
|
|
60
|
+
# %i[foo bar baz] # => [:foo, :bar, :baz]
|
|
61
|
+
# %i[1 % *] # => [:"1", :%, :*]
|
|
44
62
|
#
|
|
45
|
-
#
|
|
46
|
-
# contains an Integer, a String and a Float:
|
|
63
|
+
# * Method Kernel#Array:
|
|
47
64
|
#
|
|
48
|
-
#
|
|
65
|
+
# Array(["a", "b"]) # => ["a", "b"]
|
|
66
|
+
# Array(1..5) # => [1, 2, 3, 4, 5]
|
|
67
|
+
# Array(key: :value) # => [[:key, :value]]
|
|
68
|
+
# Array(nil) # => []
|
|
69
|
+
# Array(1) # => [1]
|
|
70
|
+
# Array({:a => "a", :b => "b"}) # => [[:a, "a"], [:b, "b"]]
|
|
49
71
|
#
|
|
50
|
-
#
|
|
51
|
-
# size of the Array) or two arguments (the initial size and a default object).
|
|
72
|
+
# * Method Array.new:
|
|
52
73
|
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
74
|
+
# Array.new # => []
|
|
75
|
+
# Array.new(3) # => [nil, nil, nil]
|
|
76
|
+
# Array.new(4) {Hash.new} # => [{}, {}, {}, {}]
|
|
77
|
+
# Array.new(3, true) # => [true, true, true]
|
|
56
78
|
#
|
|
57
|
-
#
|
|
58
|
-
# object.
|
|
59
|
-
#
|
|
60
|
-
#
|
|
79
|
+
# Note that the last example above populates the array with references to
|
|
80
|
+
# the same object. This is recommended only in cases where that object is a
|
|
81
|
+
# natively immutable object such as a symbol, a numeric, `nil`, `true`, or
|
|
82
|
+
# `false`.
|
|
61
83
|
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
# arrays:
|
|
84
|
+
# Another way to create an array with various objects, using a block; this
|
|
85
|
+
# usage is safe for mutable objects such as hashes, strings or other arrays:
|
|
65
86
|
#
|
|
66
|
-
#
|
|
67
|
-
# Array.new(4) {|i| i.to_s } #=> ["0", "1", "2", "3"]
|
|
87
|
+
# Array.new(4) {|i| i.to_s } # => ["0", "1", "2", "3"]
|
|
68
88
|
#
|
|
69
|
-
#
|
|
89
|
+
# Here is a way to create a multi-dimensional array:
|
|
70
90
|
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
91
|
+
# Array.new(3) {Array.new(3)}
|
|
92
|
+
# # => [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
|
|
73
93
|
#
|
|
74
|
-
# An array can also be created by using the Array() method, provided by Kernel,
|
|
75
|
-
# which tries to call #to_ary, then #to_a on its argument.
|
|
76
94
|
#
|
|
77
|
-
#
|
|
95
|
+
# A number of Ruby methods, both in the core and in the standard library,
|
|
96
|
+
# provide instance method `to_a`, which converts an object to an array.
|
|
97
|
+
#
|
|
98
|
+
# * ARGF#to_a
|
|
99
|
+
# * Array#to_a
|
|
100
|
+
# * Enumerable#to_a
|
|
101
|
+
# * Hash#to_a
|
|
102
|
+
# * MatchData#to_a
|
|
103
|
+
# * NilClass#to_a
|
|
104
|
+
# * OptionParser#to_a
|
|
105
|
+
# * Range#to_a
|
|
106
|
+
# * Set#to_a
|
|
107
|
+
# * Struct#to_a
|
|
108
|
+
# * Time#to_a
|
|
109
|
+
# * Benchmark::Tms#to_a
|
|
110
|
+
# * CSV::Table#to_a
|
|
111
|
+
# * Enumerator::Lazy#to_a
|
|
112
|
+
# * Gem::List#to_a
|
|
113
|
+
# * Gem::NameTuple#to_a
|
|
114
|
+
# * Gem::Platform#to_a
|
|
115
|
+
# * Gem::RequestSet::Lockfile::Tokenizer#to_a
|
|
116
|
+
# * Gem::SourceList#to_a
|
|
117
|
+
# * OpenSSL::X509::Extension#to_a
|
|
118
|
+
# * OpenSSL::X509::Name#to_a
|
|
119
|
+
# * Racc::ISet#to_a
|
|
120
|
+
# * Rinda::RingFinger#to_a
|
|
121
|
+
# * Ripper::Lexer::Elem#to_a
|
|
122
|
+
# * RubyVM::InstructionSequence#to_a
|
|
123
|
+
# * YAML::DBM#to_a
|
|
124
|
+
#
|
|
78
125
|
#
|
|
79
126
|
# ## Example Usage
|
|
80
127
|
#
|
|
@@ -269,298 +316,210 @@
|
|
|
269
316
|
#
|
|
270
317
|
# First, what's elsewhere. Class Array:
|
|
271
318
|
#
|
|
272
|
-
# * Inherits from [class
|
|
273
|
-
#
|
|
274
|
-
# * Includes [module
|
|
275
|
-
# Enumerable](Enumerable.html#module-Enumerable-label-What-27s+Here), which
|
|
319
|
+
# * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
|
|
320
|
+
# * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
|
|
276
321
|
# provides dozens of additional methods.
|
|
277
322
|
#
|
|
278
323
|
#
|
|
279
324
|
# Here, class Array provides methods that are useful for:
|
|
280
325
|
#
|
|
281
|
-
# * [Creating an Array](
|
|
282
|
-
# * [Querying](
|
|
283
|
-
# * [Comparing](
|
|
284
|
-
# * [Fetching](
|
|
285
|
-
# * [Assigning](
|
|
286
|
-
# * [Deleting](
|
|
287
|
-
# * [Combining](
|
|
288
|
-
# * [Iterating](
|
|
289
|
-
# * [Converting](
|
|
290
|
-
# * [And more....](
|
|
326
|
+
# * [Creating an Array](rdoc-ref:Array@Methods+for+Creating+an+Array)
|
|
327
|
+
# * [Querying](rdoc-ref:Array@Methods+for+Querying)
|
|
328
|
+
# * [Comparing](rdoc-ref:Array@Methods+for+Comparing)
|
|
329
|
+
# * [Fetching](rdoc-ref:Array@Methods+for+Fetching)
|
|
330
|
+
# * [Assigning](rdoc-ref:Array@Methods+for+Assigning)
|
|
331
|
+
# * [Deleting](rdoc-ref:Array@Methods+for+Deleting)
|
|
332
|
+
# * [Combining](rdoc-ref:Array@Methods+for+Combining)
|
|
333
|
+
# * [Iterating](rdoc-ref:Array@Methods+for+Iterating)
|
|
334
|
+
# * [Converting](rdoc-ref:Array@Methods+for+Converting)
|
|
335
|
+
# * [And more....](rdoc-ref:Array@Other+Methods)
|
|
291
336
|
#
|
|
292
337
|
#
|
|
293
338
|
# ### Methods for Creating an Array
|
|
294
339
|
#
|
|
295
|
-
# ::[]
|
|
296
|
-
# :
|
|
297
|
-
# ::new
|
|
298
|
-
# : Returns a new array.
|
|
299
|
-
# ::try_convert
|
|
300
|
-
# : Returns a new array created from a given object.
|
|
340
|
+
# * ::[]: Returns a new array populated with given objects.
|
|
341
|
+
# * ::new: Returns a new array.
|
|
342
|
+
# * ::try_convert: Returns a new array created from a given object.
|
|
301
343
|
#
|
|
302
344
|
#
|
|
303
345
|
# ### Methods for Querying
|
|
304
346
|
#
|
|
305
|
-
# #length, #size
|
|
306
|
-
#
|
|
307
|
-
# #
|
|
308
|
-
#
|
|
309
|
-
# #
|
|
310
|
-
#
|
|
311
|
-
# #
|
|
312
|
-
# :
|
|
313
|
-
# #
|
|
314
|
-
#
|
|
315
|
-
# #
|
|
316
|
-
#
|
|
317
|
-
# #
|
|
318
|
-
# : Returns whether exactly one element `==` a given object.
|
|
319
|
-
# #count
|
|
320
|
-
# : Returns the count of elements that meet a given criterion.
|
|
321
|
-
# #find_index, #index
|
|
322
|
-
# : Returns the index of the first element that meets a given criterion.
|
|
323
|
-
# #rindex
|
|
324
|
-
# : Returns the index of the last element that meets a given criterion.
|
|
325
|
-
# #hash
|
|
326
|
-
# : Returns the integer hash code.
|
|
347
|
+
# * #length, #size: Returns the count of elements.
|
|
348
|
+
# * #include?: Returns whether any element `==` a given object.
|
|
349
|
+
# * #empty?: Returns whether there are no elements.
|
|
350
|
+
# * #all?: Returns whether all elements meet a given criterion.
|
|
351
|
+
# * #any?: Returns whether any element meets a given criterion.
|
|
352
|
+
# * #none?: Returns whether no element `==` a given object.
|
|
353
|
+
# * #one?: Returns whether exactly one element `==` a given object.
|
|
354
|
+
# * #count: Returns the count of elements that meet a given criterion.
|
|
355
|
+
# * #find_index, #index: Returns the index of the first element that meets a
|
|
356
|
+
# given criterion.
|
|
357
|
+
# * #rindex: Returns the index of the last element that meets a given
|
|
358
|
+
# criterion.
|
|
359
|
+
# * #hash: Returns the integer hash code.
|
|
327
360
|
#
|
|
328
361
|
#
|
|
329
362
|
# ### Methods for Comparing
|
|
330
|
-
#
|
|
331
|
-
#
|
|
332
|
-
# given object.
|
|
333
|
-
#
|
|
334
|
-
# : Returns whether each element in `self` is `==` to the corresponding
|
|
335
|
-
# element in a given object.
|
|
336
|
-
# #eql?
|
|
337
|
-
# : Returns whether each element in `self` is `eql?` to the corresponding
|
|
363
|
+
#
|
|
364
|
+
# * #<=>: Returns -1, 0, or 1 * as `self` is less than, equal to, or greater
|
|
365
|
+
# than a given object.
|
|
366
|
+
# * #==: Returns whether each element in `self` is `==` to the corresponding
|
|
338
367
|
# element in a given object.
|
|
368
|
+
# * #eql?: Returns whether each element in `self` is `eql?` to the
|
|
369
|
+
# corresponding element in a given object.
|
|
339
370
|
#
|
|
340
371
|
#
|
|
341
372
|
# ### Methods for Fetching
|
|
342
373
|
#
|
|
343
374
|
# These methods do not modify `self`.
|
|
344
375
|
#
|
|
345
|
-
# #[]
|
|
346
|
-
# :
|
|
347
|
-
# #
|
|
348
|
-
# :
|
|
349
|
-
# #
|
|
350
|
-
#
|
|
351
|
-
# #
|
|
352
|
-
#
|
|
353
|
-
# #
|
|
354
|
-
#
|
|
355
|
-
#
|
|
356
|
-
#
|
|
357
|
-
# :
|
|
358
|
-
# given
|
|
359
|
-
# #
|
|
360
|
-
# :
|
|
361
|
-
#
|
|
362
|
-
#
|
|
363
|
-
# :
|
|
364
|
-
#
|
|
365
|
-
# #
|
|
366
|
-
# :
|
|
367
|
-
#
|
|
368
|
-
# #
|
|
369
|
-
#
|
|
370
|
-
# #
|
|
371
|
-
# :
|
|
372
|
-
# #
|
|
373
|
-
# : Returns the object in nested objects that is specified by a given index
|
|
374
|
-
# and additional arguments.
|
|
375
|
-
# #drop
|
|
376
|
-
# : Returns trailing elements as determined by a given index.
|
|
377
|
-
# #take
|
|
378
|
-
# : Returns leading elements as determined by a given index.
|
|
379
|
-
# #drop_while
|
|
380
|
-
# : Returns trailing elements as determined by a given block.
|
|
381
|
-
# #take_while
|
|
382
|
-
# : Returns leading elements as determined by a given block.
|
|
383
|
-
# #slice
|
|
384
|
-
# : Returns consecutive elements as determined by a given argument.
|
|
385
|
-
# #sort
|
|
386
|
-
# : Returns all elements in an order determined by `<=>` or a given block.
|
|
387
|
-
# #reverse
|
|
388
|
-
# : Returns all elements in reverse order.
|
|
389
|
-
# #compact
|
|
390
|
-
# : Returns an array containing all non-`nil` elements.
|
|
391
|
-
# #select, #filter
|
|
392
|
-
# : Returns an array containing elements selected by a given block.
|
|
393
|
-
# #uniq
|
|
394
|
-
# : Returns an array containing non-duplicate elements.
|
|
395
|
-
# #rotate
|
|
396
|
-
# : Returns all elements with some rotated from one end to the other.
|
|
397
|
-
# #bsearch
|
|
398
|
-
# : Returns an element selected via a binary search as determined by a given
|
|
376
|
+
# * #[]: Returns one or more elements.
|
|
377
|
+
# * #fetch: Returns the element at a given offset.
|
|
378
|
+
# * #first: Returns one or more leading elements.
|
|
379
|
+
# * #last: Returns one or more trailing elements.
|
|
380
|
+
# * #max: Returns one or more maximum-valued elements, as determined by `<=>`
|
|
381
|
+
# or a given block.
|
|
382
|
+
# * #min: Returns one or more minimum-valued elements, as determined by `<=>`
|
|
383
|
+
# or a given block.
|
|
384
|
+
# * #minmax: Returns the minimum-valued and maximum-valued elements, as
|
|
385
|
+
# determined by `<=>` or a given block.
|
|
386
|
+
# * #assoc: Returns the first element that is an array whose first element
|
|
387
|
+
# `==` a given object.
|
|
388
|
+
# * #rassoc: Returns the first element that is an array whose second element
|
|
389
|
+
# `==` a given object.
|
|
390
|
+
# * #at: Returns the element at a given offset.
|
|
391
|
+
# * #values_at: Returns the elements at given offsets.
|
|
392
|
+
# * #dig: Returns the object in nested objects that is specified by a given
|
|
393
|
+
# index and additional arguments.
|
|
394
|
+
# * #drop: Returns trailing elements as determined by a given index.
|
|
395
|
+
# * #take: Returns leading elements as determined by a given index.
|
|
396
|
+
# * #drop_while: Returns trailing elements as determined by a given block.
|
|
397
|
+
# * #take_while: Returns leading elements as determined by a given block.
|
|
398
|
+
# * #slice: Returns consecutive elements as determined by a given argument.
|
|
399
|
+
# * #sort: Returns all elements in an order determined by `<=>` or a given
|
|
400
|
+
# block.
|
|
401
|
+
# * #reverse: Returns all elements in reverse order.
|
|
402
|
+
# * #compact: Returns an array containing all non-`nil` elements.
|
|
403
|
+
# * #select, #filter: Returns an array containing elements selected by a given
|
|
399
404
|
# block.
|
|
400
|
-
# #
|
|
401
|
-
# :
|
|
402
|
-
#
|
|
403
|
-
#
|
|
404
|
-
# :
|
|
405
|
-
#
|
|
406
|
-
# :
|
|
405
|
+
# * #uniq: Returns an array containing non-duplicate elements.
|
|
406
|
+
# * #rotate: Returns all elements with some rotated from one end to the other.
|
|
407
|
+
# * #bsearch: Returns an element selected via a binary search as determined by
|
|
408
|
+
# a given block.
|
|
409
|
+
# * #bsearch_index: Returns the index of an element selected via a binary
|
|
410
|
+
# search as determined by a given block.
|
|
411
|
+
# * #sample: Returns one or more random elements.
|
|
412
|
+
# * #shuffle: Returns elements in a random order.
|
|
407
413
|
#
|
|
408
414
|
#
|
|
409
415
|
# ### Methods for Assigning
|
|
410
416
|
#
|
|
411
417
|
# These methods add, replace, or reorder elements in `self`.
|
|
412
418
|
#
|
|
413
|
-
# #[]
|
|
414
|
-
#
|
|
415
|
-
# #
|
|
416
|
-
# :
|
|
417
|
-
#
|
|
418
|
-
# :
|
|
419
|
-
# #
|
|
420
|
-
# :
|
|
421
|
-
#
|
|
422
|
-
#
|
|
423
|
-
# #
|
|
424
|
-
#
|
|
425
|
-
# #
|
|
426
|
-
#
|
|
427
|
-
# #
|
|
428
|
-
# : Replaces `self` with its elements reversed.
|
|
429
|
-
# #rotate!
|
|
430
|
-
# : Replaces `self` with its elements rotated.
|
|
431
|
-
# #shuffle!
|
|
432
|
-
# : Replaces `self` with its elements in random order.
|
|
433
|
-
# #sort!
|
|
434
|
-
# : Replaces `self` with its elements sorted, as determined by `<=>` or a
|
|
419
|
+
# * #[]=: Assigns specified elements with a given object.
|
|
420
|
+
# * #push, #append, #<<: Appends trailing elements.
|
|
421
|
+
# * #unshift, #prepend: Prepends leading elements.
|
|
422
|
+
# * #insert: Inserts given objects at a given offset; does not replace
|
|
423
|
+
# elements.
|
|
424
|
+
# * #concat: Appends all elements from given arrays.
|
|
425
|
+
# * #fill: Replaces specified elements with specified objects.
|
|
426
|
+
# * #replace: Replaces the content of `self` with the content of a given
|
|
427
|
+
# array.
|
|
428
|
+
# * #reverse!: Replaces `self` with its elements reversed.
|
|
429
|
+
# * #rotate!: Replaces `self` with its elements rotated.
|
|
430
|
+
# * #shuffle!: Replaces `self` with its elements in random order.
|
|
431
|
+
# * #sort!: Replaces `self` with its elements sorted, as determined by `<=>`
|
|
432
|
+
# or a given block.
|
|
433
|
+
# * #sort_by!: Replaces `self` with its elements sorted, as determined by a
|
|
435
434
|
# given block.
|
|
436
|
-
# #sort_by!
|
|
437
|
-
# : Replaces `self` with its elements sorted, as determined by a given block.
|
|
438
435
|
#
|
|
439
436
|
#
|
|
440
437
|
# ### Methods for Deleting
|
|
441
438
|
#
|
|
442
439
|
# Each of these methods removes elements from `self`:
|
|
443
440
|
#
|
|
444
|
-
# #pop
|
|
445
|
-
# :
|
|
446
|
-
# #
|
|
447
|
-
# :
|
|
448
|
-
# #
|
|
449
|
-
# :
|
|
450
|
-
# #
|
|
451
|
-
#
|
|
452
|
-
# #
|
|
453
|
-
#
|
|
454
|
-
# #
|
|
455
|
-
# : Removes elements specified by a given block.
|
|
456
|
-
# #keep_if
|
|
457
|
-
# : Removes elements not specified by a given block.
|
|
458
|
-
# #reject!
|
|
459
|
-
# : Removes elements specified by a given block.
|
|
460
|
-
# #select!, #filter!
|
|
461
|
-
# : Removes elements not specified by a given block.
|
|
462
|
-
# #slice!
|
|
463
|
-
# : Removes and returns a sequence of elements.
|
|
464
|
-
# #uniq!
|
|
465
|
-
# : Removes duplicates.
|
|
441
|
+
# * #pop: Removes and returns the last element.
|
|
442
|
+
# * #shift: Removes and returns the first element.
|
|
443
|
+
# * #compact!: Removes all `nil` elements.
|
|
444
|
+
# * #delete: Removes elements equal to a given object.
|
|
445
|
+
# * #delete_at: Removes the element at a given offset.
|
|
446
|
+
# * #delete_if: Removes elements specified by a given block.
|
|
447
|
+
# * #keep_if: Removes elements not specified by a given block.
|
|
448
|
+
# * #reject!: Removes elements specified by a given block.
|
|
449
|
+
# * #select!, #filter!: Removes elements not specified by a given block.
|
|
450
|
+
# * #slice!: Removes and returns a sequence of elements.
|
|
451
|
+
# * #uniq!: Removes duplicates.
|
|
466
452
|
#
|
|
467
453
|
#
|
|
468
454
|
# ### Methods for Combining
|
|
469
455
|
#
|
|
470
|
-
#
|
|
471
|
-
# : Returns an array containing elements found both in `self` and a given
|
|
456
|
+
# * #&: Returns an array containing elements found both in `self` and a given
|
|
472
457
|
# array.
|
|
473
|
-
# #intersection
|
|
474
|
-
#
|
|
475
|
-
#
|
|
476
|
-
# #+
|
|
477
|
-
# : Returns an array containing all elements of `self` followed by all
|
|
458
|
+
# * #intersection: Returns an array containing elements found both in `self`
|
|
459
|
+
# and in each given array.
|
|
460
|
+
# * #+: Returns an array containing all elements of `self` followed by all
|
|
478
461
|
# elements of a given array.
|
|
479
|
-
#
|
|
480
|
-
#
|
|
481
|
-
#
|
|
482
|
-
#
|
|
483
|
-
# :
|
|
484
|
-
# given
|
|
485
|
-
# #
|
|
486
|
-
#
|
|
487
|
-
#
|
|
488
|
-
#
|
|
489
|
-
# : Returns an array containing all elements of `self` that are not found in
|
|
490
|
-
# any of the given arrays..
|
|
491
|
-
# #product
|
|
492
|
-
# : Returns or yields all combinations of elements from `self` and given
|
|
493
|
-
# arrays.
|
|
462
|
+
# * #-: Returns an array containing all elements of `self` that are not found
|
|
463
|
+
# in a given array.
|
|
464
|
+
# * #|: Returns an array containing all elements of `self` and all elements of
|
|
465
|
+
# a given array, duplicates removed.
|
|
466
|
+
# * #union: Returns an array containing all elements of `self` and all
|
|
467
|
+
# elements of given arrays, duplicates removed.
|
|
468
|
+
# * #difference: Returns an array containing all elements of `self` that are
|
|
469
|
+
# not found in any of the given arrays..
|
|
470
|
+
# * #product: Returns or yields all combinations of elements from `self` and
|
|
471
|
+
# given arrays.
|
|
494
472
|
#
|
|
495
473
|
#
|
|
496
474
|
# ### Methods for Iterating
|
|
497
475
|
#
|
|
498
|
-
# #each
|
|
499
|
-
# :
|
|
500
|
-
# #
|
|
501
|
-
# :
|
|
502
|
-
#
|
|
503
|
-
# :
|
|
504
|
-
#
|
|
505
|
-
# :
|
|
506
|
-
#
|
|
507
|
-
# #
|
|
508
|
-
#
|
|
509
|
-
#
|
|
510
|
-
#
|
|
511
|
-
# : Calls a given block with permutations of elements of `self`; a permutation
|
|
512
|
-
# does not use the same element more than once.
|
|
513
|
-
# #repeated_combination
|
|
514
|
-
# : Calls a given block with combinations of elements of `self`; a combination
|
|
515
|
-
# may use the same element more than once.
|
|
516
|
-
# #repeated_permutation
|
|
517
|
-
# : Calls a given block with permutations of elements of `self`; a permutation
|
|
518
|
-
# may use the same element more than once.
|
|
476
|
+
# * #each: Passes each element to a given block.
|
|
477
|
+
# * #reverse_each: Passes each element, in reverse order, to a given block.
|
|
478
|
+
# * #each_index: Passes each element index to a given block.
|
|
479
|
+
# * #cycle: Calls a given block with each element, then does so again, for a
|
|
480
|
+
# specified number of times, or forever.
|
|
481
|
+
# * #combination: Calls a given block with combinations of elements of `self`;
|
|
482
|
+
# a combination does not use the same element more than once.
|
|
483
|
+
# * #permutation: Calls a given block with permutations of elements of `self`;
|
|
484
|
+
# a permutation does not use the same element more than once.
|
|
485
|
+
# * #repeated_combination: Calls a given block with combinations of elements
|
|
486
|
+
# of `self`; a combination may use the same element more than once.
|
|
487
|
+
# * #repeated_permutation: Calls a given block with permutations of elements
|
|
488
|
+
# of `self`; a permutation may use the same element more than once.
|
|
519
489
|
#
|
|
520
490
|
#
|
|
521
491
|
# ### Methods for Converting
|
|
522
492
|
#
|
|
523
|
-
# #map, #collect
|
|
524
|
-
#
|
|
525
|
-
# #map!, #collect
|
|
526
|
-
# :
|
|
527
|
-
# #flatten
|
|
528
|
-
#
|
|
529
|
-
# #
|
|
530
|
-
# :
|
|
531
|
-
# #inspect, #to_s
|
|
532
|
-
# : Returns a new String containing the elements.
|
|
533
|
-
# #join
|
|
534
|
-
# : Returns a newsString containing the elements joined by the field
|
|
493
|
+
# * #map, #collect: Returns an array containing the block return-value for
|
|
494
|
+
# each element.
|
|
495
|
+
# * #map!, #collect!: Replaces each element with a block return-value.
|
|
496
|
+
# * #flatten: Returns an array that is a recursive flattening of `self`.
|
|
497
|
+
# * #flatten!: Replaces each nested array in `self` with the elements from
|
|
498
|
+
# that array.
|
|
499
|
+
# * #inspect, #to_s: Returns a new String containing the elements.
|
|
500
|
+
# * #join: Returns a newsString containing the elements joined by the field
|
|
535
501
|
# separator.
|
|
536
|
-
# #to_a
|
|
537
|
-
# :
|
|
538
|
-
# #
|
|
539
|
-
# :
|
|
540
|
-
# #
|
|
541
|
-
#
|
|
542
|
-
# #transpose
|
|
543
|
-
# : Transposes `self`, which must be an array of arrays.
|
|
544
|
-
# #zip
|
|
545
|
-
# : Returns a new array of arrays containing `self` and given arrays; follow
|
|
546
|
-
# the link for details.
|
|
502
|
+
# * #to_a: Returns `self` or a new array containing all elements.
|
|
503
|
+
# * #to_ary: Returns `self`.
|
|
504
|
+
# * #to_h: Returns a new hash formed from the elements.
|
|
505
|
+
# * #transpose: Transposes `self`, which must be an array of arrays.
|
|
506
|
+
# * #zip: Returns a new array of arrays containing `self` and given arrays;
|
|
507
|
+
# follow the link for details.
|
|
547
508
|
#
|
|
548
509
|
#
|
|
549
510
|
# ### Other Methods
|
|
550
511
|
#
|
|
551
|
-
#
|
|
552
|
-
#
|
|
512
|
+
# * #*: Returns one of the following:
|
|
513
|
+
#
|
|
553
514
|
# * With integer argument `n`, a new array that is the concatenation of
|
|
554
515
|
# `n` copies of `self`.
|
|
555
516
|
# * With string argument `field_separator`, a new string that is
|
|
556
517
|
# equivalent to `join(field_separator)`.
|
|
557
518
|
#
|
|
558
|
-
#
|
|
559
|
-
# :
|
|
560
|
-
# #pack
|
|
561
|
-
# :
|
|
562
|
-
# #sum
|
|
563
|
-
# : Returns a sum of elements according to either `+` or a given block.
|
|
519
|
+
#
|
|
520
|
+
# * #abbrev: Returns a hash of unambiguous abbreviations for elements.
|
|
521
|
+
# * #pack: Packs the elements into a binary sequence.
|
|
522
|
+
# * #sum: Returns a sum of elements according to either `+` or a given block.
|
|
564
523
|
#
|
|
565
524
|
%a{annotate:rdoc:source:from=array.c}
|
|
566
525
|
class Array[unchecked out Elem] < Object
|
|
@@ -580,23 +539,27 @@ class Array[unchecked out Elem] < Object
|
|
|
580
539
|
#
|
|
581
540
|
# With no block and a single Array argument `array`, returns a new Array formed
|
|
582
541
|
# from `array`:
|
|
542
|
+
#
|
|
583
543
|
# a = Array.new([:foo, 'bar', 2])
|
|
584
544
|
# a.class # => Array
|
|
585
545
|
# a # => [:foo, "bar", 2]
|
|
586
546
|
#
|
|
587
547
|
# With no block and a single Integer argument `size`, returns a new Array of the
|
|
588
548
|
# given size whose elements are all `nil`:
|
|
549
|
+
#
|
|
589
550
|
# a = Array.new(3)
|
|
590
551
|
# a # => [nil, nil, nil]
|
|
591
552
|
#
|
|
592
553
|
# With no block and arguments `size` and `default_value`, returns an Array of
|
|
593
554
|
# the given size; each element is that same `default_value`:
|
|
555
|
+
#
|
|
594
556
|
# a = Array.new(3, 'x')
|
|
595
557
|
# a # => ['x', 'x', 'x']
|
|
596
558
|
#
|
|
597
559
|
# With a block and argument `size`, returns an Array of the given size; the
|
|
598
560
|
# block is called with each successive integer `index`; the element for that
|
|
599
561
|
# `index` is the return value from the block:
|
|
562
|
+
#
|
|
600
563
|
# a = Array.new(3) {|index| "Element #{index}" }
|
|
601
564
|
# a # => ["Element 0", "Element 1", "Element 2"]
|
|
602
565
|
#
|
|
@@ -645,10 +608,12 @@ class Array[unchecked out Elem] < Object
|
|
|
645
608
|
# -->
|
|
646
609
|
# Returns a new Array containing each element found in both `array` and Array
|
|
647
610
|
# `other_array`; duplicates are omitted; items are compared using `eql?`:
|
|
611
|
+
#
|
|
648
612
|
# [0, 1, 2, 3] & [1, 2] # => [1, 2]
|
|
649
613
|
# [0, 1, 0, 1] & [0, 1] # => [0, 1]
|
|
650
614
|
#
|
|
651
615
|
# Preserves order from `array`:
|
|
616
|
+
#
|
|
652
617
|
# [0, 1, 2] & [3, 2, 1, 0] # => [0, 1, 2]
|
|
653
618
|
#
|
|
654
619
|
# Related: Array#intersection.
|
|
@@ -662,11 +627,13 @@ class Array[unchecked out Elem] < Object
|
|
|
662
627
|
# -->
|
|
663
628
|
# When non-negative argument Integer `n` is given, returns a new Array built by
|
|
664
629
|
# concatenating the `n` copies of `self`:
|
|
630
|
+
#
|
|
665
631
|
# a = ['x', 'y']
|
|
666
632
|
# a * 3 # => ["x", "y", "x", "y", "x", "y"]
|
|
667
633
|
#
|
|
668
634
|
# When String argument `string_separator` is given, equivalent to
|
|
669
635
|
# `array.join(string_separator)`:
|
|
636
|
+
#
|
|
670
637
|
# [0, [0, 1], {foo: 0}] * ', ' # => "0, 0, 1, {:foo=>0}"
|
|
671
638
|
#
|
|
672
639
|
def *: (string str) -> ::String
|
|
@@ -678,6 +645,7 @@ class Array[unchecked out Elem] < Object
|
|
|
678
645
|
# -->
|
|
679
646
|
# Returns a new Array containing all elements of `array` followed by all
|
|
680
647
|
# elements of `other_array`:
|
|
648
|
+
#
|
|
681
649
|
# a = [0, 1] + [2, 3]
|
|
682
650
|
# a # => [0, 1, 2, 3]
|
|
683
651
|
#
|
|
@@ -692,6 +660,7 @@ class Array[unchecked out Elem] < Object
|
|
|
692
660
|
# Returns a new Array containing only those elements from `array` that are not
|
|
693
661
|
# found in Array `other_array`; items are compared using `eql?`; the order from
|
|
694
662
|
# `array` is preserved:
|
|
663
|
+
#
|
|
695
664
|
# [0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] # => [0, 2, 3]
|
|
696
665
|
# [0, 1, 2, 3] - [3, 0] # => [1, 2]
|
|
697
666
|
# [0, 1, 2] - [4] # => [0, 1, 2]
|
|
@@ -705,10 +674,12 @@ class Array[unchecked out Elem] < Object
|
|
|
705
674
|
# - array << object -> self
|
|
706
675
|
# -->
|
|
707
676
|
# Appends `object` to `self`; returns `self`:
|
|
677
|
+
#
|
|
708
678
|
# a = [:foo, 'bar', 2]
|
|
709
679
|
# a << :baz # => [:foo, "bar", 2, :baz]
|
|
710
680
|
#
|
|
711
681
|
# Appends `object` as one element, even if it is another Array:
|
|
682
|
+
#
|
|
712
683
|
# a = [:foo, 'bar', 2]
|
|
713
684
|
# a1 = a << [3, 4]
|
|
714
685
|
# a1 # => [:foo, "bar", 2, [3, 4]]
|
|
@@ -724,19 +695,25 @@ class Array[unchecked out Elem] < Object
|
|
|
724
695
|
# other_array[i]`.
|
|
725
696
|
#
|
|
726
697
|
# Returns -1 if any result is -1:
|
|
698
|
+
#
|
|
727
699
|
# [0, 1, 2] <=> [0, 1, 3] # => -1
|
|
728
700
|
#
|
|
729
701
|
# Returns 1 if any result is 1:
|
|
702
|
+
#
|
|
730
703
|
# [0, 1, 2] <=> [0, 1, 1] # => 1
|
|
731
704
|
#
|
|
732
705
|
# When all results are zero:
|
|
706
|
+
#
|
|
733
707
|
# * Returns -1 if `array` is smaller than `other_array`:
|
|
708
|
+
#
|
|
734
709
|
# [0, 1, 2] <=> [0, 1, 2, 3] # => -1
|
|
735
710
|
#
|
|
736
711
|
# * Returns 1 if `array` is larger than `other_array`:
|
|
712
|
+
#
|
|
737
713
|
# [0, 1, 2] <=> [0, 1] # => 1
|
|
738
714
|
#
|
|
739
715
|
# * Returns 0 if `array` and `other_array` are the same size:
|
|
716
|
+
#
|
|
740
717
|
# [0, 1, 2] <=> [0, 1, 2] # => 0
|
|
741
718
|
#
|
|
742
719
|
def <=>: (untyped) -> ::Integer?
|
|
@@ -747,6 +724,7 @@ class Array[unchecked out Elem] < Object
|
|
|
747
724
|
# -->
|
|
748
725
|
# Returns `true` if both `array.size == other_array.size` and for each index `i`
|
|
749
726
|
# in `array`, `array[i] == other_array[i]`:
|
|
727
|
+
#
|
|
750
728
|
# a0 = [:foo, 'bar', 2]
|
|
751
729
|
# a1 = [:foo, 'bar', 2.0]
|
|
752
730
|
# a1 == a0 # => true
|
|
@@ -774,12 +752,14 @@ class Array[unchecked out Elem] < Object
|
|
|
774
752
|
#
|
|
775
753
|
# When a single Integer argument `index` is given, returns the element at offset
|
|
776
754
|
# `index`:
|
|
755
|
+
#
|
|
777
756
|
# a = [:foo, 'bar', 2]
|
|
778
757
|
# a[0] # => :foo
|
|
779
758
|
# a[2] # => 2
|
|
780
759
|
# a # => [:foo, "bar", 2]
|
|
781
760
|
#
|
|
782
761
|
# If `index` is negative, counts relative to the end of `self`:
|
|
762
|
+
#
|
|
783
763
|
# a = [:foo, 'bar', 2]
|
|
784
764
|
# a[-1] # => 2
|
|
785
765
|
# a[-2] # => "bar"
|
|
@@ -788,12 +768,14 @@ class Array[unchecked out Elem] < Object
|
|
|
788
768
|
#
|
|
789
769
|
# When two Integer arguments `start` and `length` are given, returns a new Array
|
|
790
770
|
# of size `length` containing successive elements beginning at offset `start`:
|
|
771
|
+
#
|
|
791
772
|
# a = [:foo, 'bar', 2]
|
|
792
773
|
# a[0, 2] # => [:foo, "bar"]
|
|
793
774
|
# a[1, 2] # => ["bar", 2]
|
|
794
775
|
#
|
|
795
776
|
# If `start + length` is greater than `self.length`, returns all elements from
|
|
796
777
|
# offset `start` to the end:
|
|
778
|
+
#
|
|
797
779
|
# a = [:foo, 'bar', 2]
|
|
798
780
|
# a[0, 4] # => [:foo, "bar", 2]
|
|
799
781
|
# a[1, 3] # => ["bar", 2]
|
|
@@ -805,6 +787,7 @@ class Array[unchecked out Elem] < Object
|
|
|
805
787
|
#
|
|
806
788
|
# When a single Range argument `range` is given, treats `range.min` as `start`
|
|
807
789
|
# above and `range.size` as `length` above:
|
|
790
|
+
#
|
|
808
791
|
# a = [:foo, 'bar', 2]
|
|
809
792
|
# a[0..1] # => [:foo, "bar"]
|
|
810
793
|
# a[1..2] # => ["bar", 2]
|
|
@@ -812,18 +795,21 @@ class Array[unchecked out Elem] < Object
|
|
|
812
795
|
# Special case: If `range.start == a.size`, returns a new empty Array.
|
|
813
796
|
#
|
|
814
797
|
# If `range.end` is negative, calculates the end index from the end:
|
|
798
|
+
#
|
|
815
799
|
# a = [:foo, 'bar', 2]
|
|
816
800
|
# a[0..-1] # => [:foo, "bar", 2]
|
|
817
801
|
# a[0..-2] # => [:foo, "bar"]
|
|
818
802
|
# a[0..-3] # => [:foo]
|
|
819
803
|
#
|
|
820
804
|
# If `range.start` is negative, calculates the start index from the end:
|
|
805
|
+
#
|
|
821
806
|
# a = [:foo, 'bar', 2]
|
|
822
807
|
# a[-1..2] # => [2]
|
|
823
808
|
# a[-2..2] # => ["bar", 2]
|
|
824
809
|
# a[-3..2] # => [:foo, "bar", 2]
|
|
825
810
|
#
|
|
826
811
|
# If `range.start` is larger than the array size, returns `nil`.
|
|
812
|
+
#
|
|
827
813
|
# a = [:foo, 'bar', 2]
|
|
828
814
|
# a[4..1] # => nil
|
|
829
815
|
# a[4..0] # => nil
|
|
@@ -831,11 +817,13 @@ class Array[unchecked out Elem] < Object
|
|
|
831
817
|
#
|
|
832
818
|
# When a single Enumerator::ArithmeticSequence argument `aseq` is given, returns
|
|
833
819
|
# an Array of elements corresponding to the indexes produced by the sequence.
|
|
820
|
+
#
|
|
834
821
|
# a = ['--', 'data1', '--', 'data2', '--', 'data3']
|
|
835
822
|
# a[(1..).step(2)] # => ["data1", "data2", "data3"]
|
|
836
823
|
#
|
|
837
824
|
# Unlike slicing with range, if the start or the end of the arithmetic sequence
|
|
838
825
|
# is larger than array size, throws RangeError.
|
|
826
|
+
#
|
|
839
827
|
# a = ['--', 'data1', '--', 'data2', '--', 'data3']
|
|
840
828
|
# a[(1..11).step(2)]
|
|
841
829
|
# # RangeError (((1..11).step(2)) out of range)
|
|
@@ -844,6 +832,7 @@ class Array[unchecked out Elem] < Object
|
|
|
844
832
|
#
|
|
845
833
|
# If given a single argument, and its type is not one of the listed, tries to
|
|
846
834
|
# convert it to Integer, and raises if it is impossible:
|
|
835
|
+
#
|
|
847
836
|
# a = [:foo, 'bar', 2]
|
|
848
837
|
# # Raises TypeError (no implicit conversion of Symbol into Integer):
|
|
849
838
|
# a[:foo]
|
|
@@ -866,16 +855,19 @@ class Array[unchecked out Elem] < Object
|
|
|
866
855
|
# `self`.
|
|
867
856
|
#
|
|
868
857
|
# If `index` is non-negative, assigns `object` the element at offset `index`:
|
|
858
|
+
#
|
|
869
859
|
# a = [:foo, 'bar', 2]
|
|
870
860
|
# a[0] = 'foo' # => "foo"
|
|
871
861
|
# a # => ["foo", "bar", 2]
|
|
872
862
|
#
|
|
873
863
|
# If `index` is greater than `self.length`, extends the array:
|
|
864
|
+
#
|
|
874
865
|
# a = [:foo, 'bar', 2]
|
|
875
866
|
# a[7] = 'foo' # => "foo"
|
|
876
867
|
# a # => [:foo, "bar", 2, nil, nil, nil, nil, "foo"]
|
|
877
868
|
#
|
|
878
869
|
# If `index` is negative, counts backwards from the end of the array:
|
|
870
|
+
#
|
|
879
871
|
# a = [:foo, 'bar', 2]
|
|
880
872
|
# a[-1] = 'two' # => "two"
|
|
881
873
|
# a # => [:foo, "bar", "two"]
|
|
@@ -883,11 +875,13 @@ class Array[unchecked out Elem] < Object
|
|
|
883
875
|
# When Integer arguments `start` and `length` are given and `object` is not an
|
|
884
876
|
# Array, removes `length - 1` elements beginning at offset `start`, and assigns
|
|
885
877
|
# `object` at offset `start`:
|
|
878
|
+
#
|
|
886
879
|
# a = [:foo, 'bar', 2]
|
|
887
880
|
# a[0, 2] = 'foo' # => "foo"
|
|
888
881
|
# a # => ["foo", 2]
|
|
889
882
|
#
|
|
890
883
|
# If `start` is negative, counts backwards from the end of the array:
|
|
884
|
+
#
|
|
891
885
|
# a = [:foo, 'bar', 2]
|
|
892
886
|
# a[-2, 2] = 'foo' # => "foo"
|
|
893
887
|
# a # => [:foo, "foo"]
|
|
@@ -895,17 +889,20 @@ class Array[unchecked out Elem] < Object
|
|
|
895
889
|
# If `start` is non-negative and outside the array (` >= self.size`), extends
|
|
896
890
|
# the array with `nil`, assigns `object` at offset `start`, and ignores
|
|
897
891
|
# `length`:
|
|
892
|
+
#
|
|
898
893
|
# a = [:foo, 'bar', 2]
|
|
899
894
|
# a[6, 50] = 'foo' # => "foo"
|
|
900
895
|
# a # => [:foo, "bar", 2, nil, nil, nil, "foo"]
|
|
901
896
|
#
|
|
902
897
|
# If `length` is zero, shifts elements at and following offset `start` and
|
|
903
898
|
# assigns `object` at offset `start`:
|
|
899
|
+
#
|
|
904
900
|
# a = [:foo, 'bar', 2]
|
|
905
901
|
# a[1, 0] = 'foo' # => "foo"
|
|
906
902
|
# a # => [:foo, "foo", "bar", 2]
|
|
907
903
|
#
|
|
908
904
|
# If `length` is too large for the existing array, does not extend the array:
|
|
905
|
+
#
|
|
909
906
|
# a = [:foo, 'bar', 2]
|
|
910
907
|
# a[1, 5] = 'foo' # => "foo"
|
|
911
908
|
# a # => [:foo, "foo"]
|
|
@@ -913,29 +910,34 @@ class Array[unchecked out Elem] < Object
|
|
|
913
910
|
# When Range argument `range` is given and `object` is an Array, removes `length
|
|
914
911
|
# - 1` elements beginning at offset `start`, and assigns `object` at offset
|
|
915
912
|
# `start`:
|
|
913
|
+
#
|
|
916
914
|
# a = [:foo, 'bar', 2]
|
|
917
915
|
# a[0..1] = 'foo' # => "foo"
|
|
918
916
|
# a # => ["foo", 2]
|
|
919
917
|
#
|
|
920
918
|
# if `range.begin` is negative, counts backwards from the end of the array:
|
|
919
|
+
#
|
|
921
920
|
# a = [:foo, 'bar', 2]
|
|
922
921
|
# a[-2..2] = 'foo' # => "foo"
|
|
923
922
|
# a # => [:foo, "foo"]
|
|
924
923
|
#
|
|
925
924
|
# If the array length is less than `range.begin`, assigns `object` at offset
|
|
926
925
|
# `range.begin`, and ignores `length`:
|
|
926
|
+
#
|
|
927
927
|
# a = [:foo, 'bar', 2]
|
|
928
928
|
# a[6..50] = 'foo' # => "foo"
|
|
929
929
|
# a # => [:foo, "bar", 2, nil, nil, nil, "foo"]
|
|
930
930
|
#
|
|
931
931
|
# If `range.end` is zero, shifts elements at and following offset `start` and
|
|
932
932
|
# assigns `object` at offset `start`:
|
|
933
|
+
#
|
|
933
934
|
# a = [:foo, 'bar', 2]
|
|
934
935
|
# a[1..0] = 'foo' # => "foo"
|
|
935
936
|
# a # => [:foo, "foo", "bar", 2]
|
|
936
937
|
#
|
|
937
938
|
# If `range.end` is negative, assigns `object` at offset `start`, retains
|
|
938
939
|
# `range.end.abs -1` elements past that, and removes those beyond:
|
|
940
|
+
#
|
|
939
941
|
# a = [:foo, 'bar', 2]
|
|
940
942
|
# a[1..-1] = 'foo' # => "foo"
|
|
941
943
|
# a # => [:foo, "foo"]
|
|
@@ -949,6 +951,7 @@ class Array[unchecked out Elem] < Object
|
|
|
949
951
|
#
|
|
950
952
|
# If `range.end` is too large for the existing array, replaces array elements,
|
|
951
953
|
# but does not extend the array with `nil` values:
|
|
954
|
+
#
|
|
952
955
|
# a = [:foo, 'bar', 2]
|
|
953
956
|
# a[1..5] = 'foo' # => "foo"
|
|
954
957
|
# a # => [:foo, "foo"]
|
|
@@ -971,6 +974,7 @@ class Array[unchecked out Elem] < Object
|
|
|
971
974
|
#
|
|
972
975
|
# With no block given and no argument, returns `true` if `self` contains only
|
|
973
976
|
# truthy elements, `false` otherwise:
|
|
977
|
+
#
|
|
974
978
|
# [0, 1, :foo].all? # => true
|
|
975
979
|
# [0, nil, 2].all? # => false
|
|
976
980
|
# [].all? # => true
|
|
@@ -978,11 +982,13 @@ class Array[unchecked out Elem] < Object
|
|
|
978
982
|
# With a block given and no argument, calls the block with each element in
|
|
979
983
|
# `self`; returns `true` if the block returns only truthy values, `false`
|
|
980
984
|
# otherwise:
|
|
985
|
+
#
|
|
981
986
|
# [0, 1, 2].all? { |element| element < 3 } # => true
|
|
982
987
|
# [0, 1, 2].all? { |element| element < 2 } # => false
|
|
983
988
|
#
|
|
984
989
|
# If argument `obj` is given, returns `true` if `obj.===` every element, `false`
|
|
985
990
|
# otherwise:
|
|
991
|
+
#
|
|
986
992
|
# ['food', 'fool', 'foot'].all?(/foo/) # => true
|
|
987
993
|
# ['food', 'drink'].all?(/bar/) # => false
|
|
988
994
|
# [].all?(/foo/) # => true
|
|
@@ -1005,6 +1011,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1005
1011
|
#
|
|
1006
1012
|
# With no block given and no argument, returns `true` if `self` has any truthy
|
|
1007
1013
|
# element, `false` otherwise:
|
|
1014
|
+
#
|
|
1008
1015
|
# [nil, 0, false].any? # => true
|
|
1009
1016
|
# [nil, false].any? # => false
|
|
1010
1017
|
# [].any? # => false
|
|
@@ -1012,11 +1019,13 @@ class Array[unchecked out Elem] < Object
|
|
|
1012
1019
|
# With a block given and no argument, calls the block with each element in
|
|
1013
1020
|
# `self`; returns `true` if the block returns any truthy value, `false`
|
|
1014
1021
|
# otherwise:
|
|
1022
|
+
#
|
|
1015
1023
|
# [0, 1, 2].any? {|element| element > 1 } # => true
|
|
1016
1024
|
# [0, 1, 2].any? {|element| element > 2 } # => false
|
|
1017
1025
|
#
|
|
1018
1026
|
# If argument `obj` is given, returns `true` if `obj`.`===` any element, `false`
|
|
1019
1027
|
# otherwise:
|
|
1028
|
+
#
|
|
1020
1029
|
# ['food', 'drink'].any?(/foo/) # => true
|
|
1021
1030
|
# ['food', 'drink'].any?(/bar/) # => false
|
|
1022
1031
|
# [].any?(/foo/) # => false
|
|
@@ -1031,10 +1040,12 @@ class Array[unchecked out Elem] < Object
|
|
|
1031
1040
|
# Appends trailing elements.
|
|
1032
1041
|
#
|
|
1033
1042
|
# Appends each argument in `objects` to `self`; returns `self`:
|
|
1043
|
+
#
|
|
1034
1044
|
# a = [:foo, 'bar', 2]
|
|
1035
1045
|
# a.push(:baz, :bat) # => [:foo, "bar", 2, :baz, :bat]
|
|
1036
1046
|
#
|
|
1037
1047
|
# Appends each argument as one element, even if it is another Array:
|
|
1048
|
+
#
|
|
1038
1049
|
# a = [:foo, 'bar', 2]
|
|
1039
1050
|
# a1 = a.push([:baz, :bat], [:bam, :bad])
|
|
1040
1051
|
# a1 # => [:foo, "bar", 2, [:baz, :bat], [:bam, :bad]]
|
|
@@ -1051,6 +1062,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1051
1062
|
# -->
|
|
1052
1063
|
# Returns the first element in `self` that is an Array whose first element `==`
|
|
1053
1064
|
# `obj`:
|
|
1065
|
+
#
|
|
1054
1066
|
# a = [{foo: 0}, [2, 4], [4, 5, 6], [4, 5]]
|
|
1055
1067
|
# a.assoc(4) # => [4, 5, 6]
|
|
1056
1068
|
#
|
|
@@ -1100,6 +1112,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1100
1112
|
# - array.clear -> self
|
|
1101
1113
|
# -->
|
|
1102
1114
|
# Removes all elements from `self`:
|
|
1115
|
+
#
|
|
1103
1116
|
# a = [:foo, 'bar', 2]
|
|
1104
1117
|
# a.clear # => []
|
|
1105
1118
|
#
|
|
@@ -1112,6 +1125,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1112
1125
|
# -->
|
|
1113
1126
|
# Calls the block, if given, with each element of `self`; returns a new Array
|
|
1114
1127
|
# whose elements are the return values from the block:
|
|
1128
|
+
#
|
|
1115
1129
|
# a = [:foo, 'bar', 2]
|
|
1116
1130
|
# a1 = a.map {|element| element.class }
|
|
1117
1131
|
# a1 # => [Symbol, String, Integer]
|
|
@@ -1133,10 +1147,12 @@ class Array[unchecked out Elem] < Object
|
|
|
1133
1147
|
# -->
|
|
1134
1148
|
# Calls the block, if given, with each element; replaces the element with the
|
|
1135
1149
|
# block's return value:
|
|
1150
|
+
#
|
|
1136
1151
|
# a = [:foo, 'bar', 2]
|
|
1137
1152
|
# a.map! { |element| element.class } # => [Symbol, String, Integer]
|
|
1138
1153
|
#
|
|
1139
1154
|
# Returns a new Enumerator if no block given:
|
|
1155
|
+
#
|
|
1140
1156
|
# a = [:foo, 'bar', 2]
|
|
1141
1157
|
# a1 = a.map!
|
|
1142
1158
|
# a1 # => #<Enumerator: [:foo, "bar", 2]:map!>
|
|
@@ -1159,35 +1175,43 @@ class Array[unchecked out Elem] < Object
|
|
|
1159
1175
|
# `self`.
|
|
1160
1176
|
#
|
|
1161
1177
|
# Example:
|
|
1178
|
+
#
|
|
1162
1179
|
# a = [0, 1, 2]
|
|
1163
1180
|
# a.combination(2) {|combination| p combination }
|
|
1164
1181
|
#
|
|
1165
1182
|
# Output:
|
|
1183
|
+
#
|
|
1166
1184
|
# [0, 1]
|
|
1167
1185
|
# [0, 2]
|
|
1168
1186
|
# [1, 2]
|
|
1169
1187
|
#
|
|
1170
1188
|
# Another example:
|
|
1189
|
+
#
|
|
1171
1190
|
# a = [0, 1, 2]
|
|
1172
1191
|
# a.combination(3) {|combination| p combination }
|
|
1173
1192
|
#
|
|
1174
1193
|
# Output:
|
|
1194
|
+
#
|
|
1175
1195
|
# [0, 1, 2]
|
|
1176
1196
|
#
|
|
1177
1197
|
# When `n` is zero, calls the block once with a new empty Array:
|
|
1198
|
+
#
|
|
1178
1199
|
# a = [0, 1, 2]
|
|
1179
1200
|
# a1 = a.combination(0) {|combination| p combination }
|
|
1180
1201
|
#
|
|
1181
1202
|
# Output:
|
|
1203
|
+
#
|
|
1182
1204
|
# []
|
|
1183
1205
|
#
|
|
1184
1206
|
# When `n` is out of range (negative or larger than `self.size`), does not call
|
|
1185
1207
|
# the block:
|
|
1208
|
+
#
|
|
1186
1209
|
# a = [0, 1, 2]
|
|
1187
1210
|
# a.combination(-1) {|combination| fail 'Cannot happen' }
|
|
1188
1211
|
# a.combination(4) {|combination| fail 'Cannot happen' }
|
|
1189
1212
|
#
|
|
1190
1213
|
# Returns a new Enumerator if no block given:
|
|
1214
|
+
#
|
|
1191
1215
|
# a = [0, 1, 2]
|
|
1192
1216
|
# a.combination(2) # => #<Enumerator: [0, 1, 2]:combination(2)>
|
|
1193
1217
|
#
|
|
@@ -1199,6 +1223,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1199
1223
|
# - array.compact -> new_array
|
|
1200
1224
|
# -->
|
|
1201
1225
|
# Returns a new Array containing all non-`nil` elements from `self`:
|
|
1226
|
+
#
|
|
1202
1227
|
# a = [nil, 0, nil, 1, nil, 2, nil]
|
|
1203
1228
|
# a.compact # => [0, 1, 2]
|
|
1204
1229
|
#
|
|
@@ -1220,6 +1245,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1220
1245
|
# -->
|
|
1221
1246
|
# Adds to `array` all elements from each Array in `other_arrays`; returns
|
|
1222
1247
|
# `self`:
|
|
1248
|
+
#
|
|
1223
1249
|
# a = [0, 1]
|
|
1224
1250
|
# a.concat([2, 3], [4, 5]) # => [0, 1, 2, 3, 4, 5]
|
|
1225
1251
|
#
|
|
@@ -1234,19 +1260,22 @@ class Array[unchecked out Elem] < Object
|
|
|
1234
1260
|
# Returns a count of specified elements.
|
|
1235
1261
|
#
|
|
1236
1262
|
# With no argument and no block, returns the count of all elements:
|
|
1263
|
+
#
|
|
1237
1264
|
# [0, 1, 2].count # => 3
|
|
1238
1265
|
# [].count # => 0
|
|
1239
1266
|
#
|
|
1240
1267
|
# With argument `obj`, returns the count of elements `==` to `obj`:
|
|
1268
|
+
#
|
|
1241
1269
|
# [0, 1, 2, 0.0].count(0) # => 2
|
|
1242
1270
|
# [0, 1, 2].count(3) # => 0
|
|
1243
1271
|
#
|
|
1244
1272
|
# With no argument and a block given, calls the block with each element; returns
|
|
1245
1273
|
# the count of elements for which the block returns a truthy value:
|
|
1274
|
+
#
|
|
1246
1275
|
# [0, 1, 2, 3].count {|element| element > 1} # => 2
|
|
1247
1276
|
#
|
|
1248
1277
|
# With argument `obj` and a block given, issues a warning, ignores the block,
|
|
1249
|
-
# and returns the count of elements `==` to `obj
|
|
1278
|
+
# and returns the count of elements `==` to `obj`.
|
|
1250
1279
|
#
|
|
1251
1280
|
def count: () -> ::Integer
|
|
1252
1281
|
| (Elem obj) -> ::Integer
|
|
@@ -1262,15 +1291,18 @@ class Array[unchecked out Elem] < Object
|
|
|
1262
1291
|
# When called with positive Integer argument `count` and a block, calls the
|
|
1263
1292
|
# block with each element, then does so again, until it has done so `count`
|
|
1264
1293
|
# times; returns `nil`:
|
|
1294
|
+
#
|
|
1265
1295
|
# output = []
|
|
1266
1296
|
# [0, 1].cycle(2) {|element| output.push(element) } # => nil
|
|
1267
1297
|
# output # => [0, 1, 0, 1]
|
|
1268
1298
|
#
|
|
1269
1299
|
# If `count` is zero or negative, does not call the block:
|
|
1300
|
+
#
|
|
1270
1301
|
# [0, 1].cycle(0) {|element| fail 'Cannot happen' } # => nil
|
|
1271
1302
|
# [0, 1].cycle(-1) {|element| fail 'Cannot happen' } # => nil
|
|
1272
1303
|
#
|
|
1273
1304
|
# When a block is given, and argument is omitted or `nil`, cycles forever:
|
|
1305
|
+
#
|
|
1274
1306
|
# # Prints 0 and 1 forever.
|
|
1275
1307
|
# [0, 1].cycle {|element| puts element }
|
|
1276
1308
|
# [0, 1].cycle(nil) {|element| puts element }
|
|
@@ -1296,10 +1328,11 @@ class Array[unchecked out Elem] < Object
|
|
|
1296
1328
|
# - array.delete(obj) -> deleted_object
|
|
1297
1329
|
# - array.delete(obj) {|nosuch| ... } -> deleted_object or block_return
|
|
1298
1330
|
# -->
|
|
1299
|
-
# Removes zero or more elements from `self
|
|
1331
|
+
# Removes zero or more elements from `self`.
|
|
1300
1332
|
#
|
|
1301
1333
|
# When no block is given, removes from `self` each element `ele` such that `ele
|
|
1302
1334
|
# == obj`; returns the last deleted element:
|
|
1335
|
+
#
|
|
1303
1336
|
# s1 = 'bar'; s2 = 'bar'
|
|
1304
1337
|
# a = [:foo, s1, 2, s2]
|
|
1305
1338
|
# a.delete('bar') # => "bar"
|
|
@@ -1312,12 +1345,14 @@ class Array[unchecked out Elem] < Object
|
|
|
1312
1345
|
#
|
|
1313
1346
|
# If any such elements are found, ignores the block and returns the last deleted
|
|
1314
1347
|
# element:
|
|
1348
|
+
#
|
|
1315
1349
|
# s1 = 'bar'; s2 = 'bar'
|
|
1316
1350
|
# a = [:foo, s1, 2, s2]
|
|
1317
1351
|
# deleted_obj = a.delete('bar') {|obj| fail 'Cannot happen' }
|
|
1318
1352
|
# a # => [:foo, 2]
|
|
1319
1353
|
#
|
|
1320
1354
|
# If no such elements are found, returns the block's return value:
|
|
1355
|
+
#
|
|
1321
1356
|
# a = [:foo, 'bar', 2]
|
|
1322
1357
|
# a.delete(:nosuch) {|obj| "#{obj} not found" } # => "nosuch not found"
|
|
1323
1358
|
#
|
|
@@ -1331,6 +1366,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1331
1366
|
# Deletes an element from `self`, per the given Integer `index`.
|
|
1332
1367
|
#
|
|
1333
1368
|
# When `index` is non-negative, deletes the element at offset `index`:
|
|
1369
|
+
#
|
|
1334
1370
|
# a = [:foo, 'bar', 2]
|
|
1335
1371
|
# a.delete_at(1) # => "bar"
|
|
1336
1372
|
# a # => [:foo, 2]
|
|
@@ -1338,6 +1374,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1338
1374
|
# If index is too large, returns `nil`.
|
|
1339
1375
|
#
|
|
1340
1376
|
# When `index` is negative, counts backward from the end of the array:
|
|
1377
|
+
#
|
|
1341
1378
|
# a = [:foo, 'bar', 2]
|
|
1342
1379
|
# a.delete_at(-2) # => "bar"
|
|
1343
1380
|
# a # => [:foo, 2]
|
|
@@ -1351,14 +1388,18 @@ class Array[unchecked out Elem] < Object
|
|
|
1351
1388
|
# - array.delete_if {|element| ... } -> self
|
|
1352
1389
|
# - array.delete_if -> Enumerator
|
|
1353
1390
|
# -->
|
|
1354
|
-
# Removes each element in
|
|
1355
|
-
#
|
|
1356
|
-
# a = [:foo, 'bar', 2, 'bat']
|
|
1357
|
-
# a.delete_if {|element| element.to_s.start_with?('b') } # => [:foo, 2]
|
|
1391
|
+
# Removes each element in +self+ for which the block returns a truthy value;
|
|
1392
|
+
# returns +self+:
|
|
1358
1393
|
#
|
|
1359
|
-
#
|
|
1360
|
-
#
|
|
1361
|
-
#
|
|
1394
|
+
# a = [:foo, 'bar', 2, 'bat']
|
|
1395
|
+
# a.delete_if {|element| element.to_s.start_with?('b') } # => [:foo, 2]
|
|
1396
|
+
#
|
|
1397
|
+
# Returns a new \Enumerator if no block given:
|
|
1398
|
+
#
|
|
1399
|
+
# a = [:foo, 'bar', 2]
|
|
1400
|
+
# a.delete_if # => #<Enumerator: [:foo, "bar", 2]:delete_if>
|
|
1401
|
+
#
|
|
1402
|
+
# 3
|
|
1362
1403
|
#
|
|
1363
1404
|
def delete_if: () { (Elem item) -> boolish } -> self
|
|
1364
1405
|
| () -> ::Enumerator[Elem, self]
|
|
@@ -1370,6 +1411,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1370
1411
|
# Returns a new Array containing only those elements from `self` that are not
|
|
1371
1412
|
# found in any of the Arrays `other_arrays`; items are compared using `eql?`;
|
|
1372
1413
|
# order from `self` is preserved:
|
|
1414
|
+
#
|
|
1373
1415
|
# [0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1]) # => [0, 2, 3]
|
|
1374
1416
|
# [0, 1, 2, 3].difference([3, 0], [1, 3]) # => [2]
|
|
1375
1417
|
# [0, 1, 2].difference([4]) # => [0, 1, 2]
|
|
@@ -1389,6 +1431,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1389
1431
|
# [Dig Methods](rdoc-ref:dig_methods.rdoc).
|
|
1390
1432
|
#
|
|
1391
1433
|
# Examples:
|
|
1434
|
+
#
|
|
1392
1435
|
# a = [:foo, [:bar, :baz, [:bat, :bam]]]
|
|
1393
1436
|
# a.dig(1) # => [:bar, :baz, [:bat, :bam]]
|
|
1394
1437
|
# a.dig(1, 2) # => [:bat, :bam]
|
|
@@ -1406,6 +1449,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1406
1449
|
# `n` is a non-negative Integer; does not modify `self`.
|
|
1407
1450
|
#
|
|
1408
1451
|
# Examples:
|
|
1452
|
+
#
|
|
1409
1453
|
# a = [0, 1, 2, 3, 4, 5]
|
|
1410
1454
|
# a.drop(0) # => [0, 1, 2, 3, 4, 5]
|
|
1411
1455
|
# a.drop(1) # => [1, 2, 3, 4, 5]
|
|
@@ -1424,10 +1468,12 @@ class Array[unchecked out Elem] < Object
|
|
|
1424
1468
|
# With a block given, calls the block with each successive element of `self`;
|
|
1425
1469
|
# stops if the block returns `false` or `nil`; returns a new Array *omitting*
|
|
1426
1470
|
# those elements for which the block returned a truthy value:
|
|
1471
|
+
#
|
|
1427
1472
|
# a = [0, 1, 2, 3, 4, 5]
|
|
1428
1473
|
# a.drop_while {|element| element < 3 } # => [3, 4, 5]
|
|
1429
1474
|
#
|
|
1430
1475
|
# With no block given, returns a new Enumerator:
|
|
1476
|
+
#
|
|
1431
1477
|
# [0, 1].drop_while # => # => #<Enumerator: [0, 1]:drop_while>
|
|
1432
1478
|
#
|
|
1433
1479
|
def drop_while: () { (Elem obj) -> boolish } -> ::Array[Elem]
|
|
@@ -1442,29 +1488,35 @@ class Array[unchecked out Elem] < Object
|
|
|
1442
1488
|
#
|
|
1443
1489
|
# When a block given, passes each successive array element to the block; returns
|
|
1444
1490
|
# `self`:
|
|
1491
|
+
#
|
|
1445
1492
|
# a = [:foo, 'bar', 2]
|
|
1446
1493
|
# a.each {|element| puts "#{element.class} #{element}" }
|
|
1447
1494
|
#
|
|
1448
1495
|
# Output:
|
|
1496
|
+
#
|
|
1449
1497
|
# Symbol foo
|
|
1450
1498
|
# String bar
|
|
1451
1499
|
# Integer 2
|
|
1452
1500
|
#
|
|
1453
1501
|
# Allows the array to be modified during iteration:
|
|
1502
|
+
#
|
|
1454
1503
|
# a = [:foo, 'bar', 2]
|
|
1455
1504
|
# a.each {|element| puts element; a.clear if element.to_s.start_with?('b') }
|
|
1456
1505
|
#
|
|
1457
1506
|
# Output:
|
|
1507
|
+
#
|
|
1458
1508
|
# foo
|
|
1459
1509
|
# bar
|
|
1460
1510
|
#
|
|
1461
1511
|
# When no block given, returns a new Enumerator:
|
|
1462
1512
|
# a = [:foo, 'bar', 2]
|
|
1513
|
+
#
|
|
1463
1514
|
# e = a.each
|
|
1464
1515
|
# e # => #<Enumerator: [:foo, "bar", 2]:each>
|
|
1465
1516
|
# a1 = e.each {|element| puts "#{element.class} #{element}" }
|
|
1466
1517
|
#
|
|
1467
1518
|
# Output:
|
|
1519
|
+
#
|
|
1468
1520
|
# Symbol foo
|
|
1469
1521
|
# String bar
|
|
1470
1522
|
# Integer 2
|
|
@@ -1483,29 +1535,35 @@ class Array[unchecked out Elem] < Object
|
|
|
1483
1535
|
#
|
|
1484
1536
|
# When a block given, passes each successive array index to the block; returns
|
|
1485
1537
|
# `self`:
|
|
1538
|
+
#
|
|
1486
1539
|
# a = [:foo, 'bar', 2]
|
|
1487
1540
|
# a.each_index {|index| puts "#{index} #{a[index]}" }
|
|
1488
1541
|
#
|
|
1489
1542
|
# Output:
|
|
1543
|
+
#
|
|
1490
1544
|
# 0 foo
|
|
1491
1545
|
# 1 bar
|
|
1492
1546
|
# 2 2
|
|
1493
1547
|
#
|
|
1494
1548
|
# Allows the array to be modified during iteration:
|
|
1549
|
+
#
|
|
1495
1550
|
# a = [:foo, 'bar', 2]
|
|
1496
1551
|
# a.each_index {|index| puts index; a.clear if index > 0 }
|
|
1497
1552
|
#
|
|
1498
1553
|
# Output:
|
|
1554
|
+
#
|
|
1499
1555
|
# 0
|
|
1500
1556
|
# 1
|
|
1501
1557
|
#
|
|
1502
1558
|
# When no block given, returns a new Enumerator:
|
|
1559
|
+
#
|
|
1503
1560
|
# a = [:foo, 'bar', 2]
|
|
1504
1561
|
# e = a.each_index
|
|
1505
1562
|
# e # => #<Enumerator: [:foo, "bar", 2]:each_index>
|
|
1506
1563
|
# a1 = e.each {|index| puts "#{index} #{a[index]}"}
|
|
1507
1564
|
#
|
|
1508
1565
|
# Output:
|
|
1566
|
+
#
|
|
1509
1567
|
# 0 foo
|
|
1510
1568
|
# 1 bar
|
|
1511
1569
|
# 2 2
|
|
@@ -1529,14 +1587,15 @@ class Array[unchecked out Elem] < Object
|
|
|
1529
1587
|
# -->
|
|
1530
1588
|
# Returns `true` if `self` and `other_array` are the same size, and if, for each
|
|
1531
1589
|
# index `i` in `self`, `self[i].eql? other_array[i]`:
|
|
1590
|
+
#
|
|
1532
1591
|
# a0 = [:foo, 'bar', 2]
|
|
1533
1592
|
# a1 = [:foo, 'bar', 2]
|
|
1534
1593
|
# a1.eql?(a0) # => true
|
|
1535
1594
|
#
|
|
1536
1595
|
# Otherwise, returns `false`.
|
|
1537
1596
|
#
|
|
1538
|
-
# This method is different from method
|
|
1539
|
-
#
|
|
1597
|
+
# This method is different from method Array#==, which compares using method
|
|
1598
|
+
# `Object#==`.
|
|
1540
1599
|
#
|
|
1541
1600
|
def eql?: (untyped other) -> bool
|
|
1542
1601
|
|
|
@@ -1550,16 +1609,19 @@ class Array[unchecked out Elem] < Object
|
|
|
1550
1609
|
#
|
|
1551
1610
|
# With the single Integer argument `index`, returns the element at offset
|
|
1552
1611
|
# `index`:
|
|
1612
|
+
#
|
|
1553
1613
|
# a = [:foo, 'bar', 2]
|
|
1554
1614
|
# a.fetch(1) # => "bar"
|
|
1555
1615
|
#
|
|
1556
1616
|
# If `index` is negative, counts from the end of the array:
|
|
1617
|
+
#
|
|
1557
1618
|
# a = [:foo, 'bar', 2]
|
|
1558
1619
|
# a.fetch(-1) # => 2
|
|
1559
1620
|
# a.fetch(-2) # => "bar"
|
|
1560
1621
|
#
|
|
1561
1622
|
# With arguments `index` and `default_value`, returns the element at offset
|
|
1562
1623
|
# `index` if index is in range, otherwise returns `default_value`:
|
|
1624
|
+
#
|
|
1563
1625
|
# a = [:foo, 'bar', 2]
|
|
1564
1626
|
# a.fetch(1, nil) # => "bar"
|
|
1565
1627
|
#
|
|
@@ -1590,6 +1652,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1590
1652
|
#
|
|
1591
1653
|
# With argument `obj` and no block given, replaces all elements with that one
|
|
1592
1654
|
# object:
|
|
1655
|
+
#
|
|
1593
1656
|
# a = ['a', 'b', 'c', 'd']
|
|
1594
1657
|
# a # => ["a", "b", "c", "d"]
|
|
1595
1658
|
# a.fill(:X) # => [:X, :X, :X, :X]
|
|
@@ -1599,10 +1662,12 @@ class Array[unchecked out Elem] < Object
|
|
|
1599
1662
|
#
|
|
1600
1663
|
# If `start` is in range (`0 <= start < array.size`), replaces all elements from
|
|
1601
1664
|
# offset `start` through the end:
|
|
1665
|
+
#
|
|
1602
1666
|
# a = ['a', 'b', 'c', 'd']
|
|
1603
1667
|
# a.fill(:X, 2) # => ["a", "b", :X, :X]
|
|
1604
1668
|
#
|
|
1605
1669
|
# If `start` is too large (`start >= array.size`), does nothing:
|
|
1670
|
+
#
|
|
1606
1671
|
# a = ['a', 'b', 'c', 'd']
|
|
1607
1672
|
# a.fill(:X, 4) # => ["a", "b", "c", "d"]
|
|
1608
1673
|
# a = ['a', 'b', 'c', 'd']
|
|
@@ -1610,10 +1675,12 @@ class Array[unchecked out Elem] < Object
|
|
|
1610
1675
|
#
|
|
1611
1676
|
# If `start` is negative, counts from the end (starting index is `start +
|
|
1612
1677
|
# array.size`):
|
|
1678
|
+
#
|
|
1613
1679
|
# a = ['a', 'b', 'c', 'd']
|
|
1614
1680
|
# a.fill(:X, -2) # => ["a", "b", :X, :X]
|
|
1615
1681
|
#
|
|
1616
1682
|
# If `start` is too small (less than and far from zero), replaces all elements:
|
|
1683
|
+
#
|
|
1617
1684
|
# a = ['a', 'b', 'c', 'd']
|
|
1618
1685
|
# a.fill(:X, -6) # => [:X, :X, :X, :X]
|
|
1619
1686
|
# a = ['a', 'b', 'c', 'd']
|
|
@@ -1624,20 +1691,24 @@ class Array[unchecked out Elem] < Object
|
|
|
1624
1691
|
#
|
|
1625
1692
|
# If `start` is in range, replaces `length` elements beginning at offset
|
|
1626
1693
|
# `start`:
|
|
1694
|
+
#
|
|
1627
1695
|
# a = ['a', 'b', 'c', 'd']
|
|
1628
1696
|
# a.fill(:X, 1, 1) # => ["a", :X, "c", "d"]
|
|
1629
1697
|
#
|
|
1630
1698
|
# If `start` is negative, counts from the end:
|
|
1699
|
+
#
|
|
1631
1700
|
# a = ['a', 'b', 'c', 'd']
|
|
1632
1701
|
# a.fill(:X, -2, 1) # => ["a", "b", :X, "d"]
|
|
1633
1702
|
#
|
|
1634
1703
|
# If `start` is large (`start >= array.size`), extends `self` with `nil`:
|
|
1704
|
+
#
|
|
1635
1705
|
# a = ['a', 'b', 'c', 'd']
|
|
1636
1706
|
# a.fill(:X, 5, 0) # => ["a", "b", "c", "d", nil]
|
|
1637
1707
|
# a = ['a', 'b', 'c', 'd']
|
|
1638
1708
|
# a.fill(:X, 5, 2) # => ["a", "b", "c", "d", nil, :X, :X]
|
|
1639
1709
|
#
|
|
1640
1710
|
# If `length` is zero or negative, replaces no elements:
|
|
1711
|
+
#
|
|
1641
1712
|
# a = ['a', 'b', 'c', 'd']
|
|
1642
1713
|
# a.fill(:X, 1, 0) # => ["a", "b", "c", "d"]
|
|
1643
1714
|
# a.fill(:X, 1, -1) # => ["a", "b", "c", "d"]
|
|
@@ -1647,14 +1718,17 @@ class Array[unchecked out Elem] < Object
|
|
|
1647
1718
|
#
|
|
1648
1719
|
# If the range is positive and ascending (`0 < range.begin <= range.end`),
|
|
1649
1720
|
# replaces elements from `range.begin` to `range.end`:
|
|
1721
|
+
#
|
|
1650
1722
|
# a = ['a', 'b', 'c', 'd']
|
|
1651
1723
|
# a.fill(:X, (1..1)) # => ["a", :X, "c", "d"]
|
|
1652
1724
|
#
|
|
1653
1725
|
# If `range.first` is negative, replaces no elements:
|
|
1726
|
+
#
|
|
1654
1727
|
# a = ['a', 'b', 'c', 'd']
|
|
1655
1728
|
# a.fill(:X, (-1..1)) # => ["a", "b", "c", "d"]
|
|
1656
1729
|
#
|
|
1657
1730
|
# If `range.last` is negative, counts from the end:
|
|
1731
|
+
#
|
|
1658
1732
|
# a = ['a', 'b', 'c', 'd']
|
|
1659
1733
|
# a.fill(:X, (0..-2)) # => [:X, :X, :X, "d"]
|
|
1660
1734
|
# a = ['a', 'b', 'c', 'd']
|
|
@@ -1662,6 +1736,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1662
1736
|
#
|
|
1663
1737
|
# If `range.last` and `range.last` are both negative, both count from the end of
|
|
1664
1738
|
# the array:
|
|
1739
|
+
#
|
|
1665
1740
|
# a = ['a', 'b', 'c', 'd']
|
|
1666
1741
|
# a.fill(:X, (-1..-1)) # => ["a", "b", "c", :X]
|
|
1667
1742
|
# a = ['a', 'b', 'c', 'd']
|
|
@@ -1669,29 +1744,34 @@ class Array[unchecked out Elem] < Object
|
|
|
1669
1744
|
#
|
|
1670
1745
|
# With no arguments and a block given, calls the block with each index; replaces
|
|
1671
1746
|
# the corresponding element with the block's return value:
|
|
1747
|
+
#
|
|
1672
1748
|
# a = ['a', 'b', 'c', 'd']
|
|
1673
1749
|
# a.fill { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"]
|
|
1674
1750
|
#
|
|
1675
1751
|
# With argument `start` and a block given, calls the block with each index from
|
|
1676
1752
|
# offset `start` to the end; replaces the corresponding element with the block's
|
|
1677
|
-
# return value
|
|
1753
|
+
# return value.
|
|
1678
1754
|
#
|
|
1679
1755
|
# If start is in range (`0 <= start < array.size`), replaces from offset `start`
|
|
1680
1756
|
# to the end:
|
|
1757
|
+
#
|
|
1681
1758
|
# a = ['a', 'b', 'c', 'd']
|
|
1682
1759
|
# a.fill(1) { |index| "new_#{index}" } # => ["a", "new_1", "new_2", "new_3"]
|
|
1683
1760
|
#
|
|
1684
1761
|
# If `start` is too large(`start >= array.size`), does nothing:
|
|
1762
|
+
#
|
|
1685
1763
|
# a = ['a', 'b', 'c', 'd']
|
|
1686
1764
|
# a.fill(4) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
|
|
1687
1765
|
# a = ['a', 'b', 'c', 'd']
|
|
1688
1766
|
# a.fill(4) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
|
|
1689
1767
|
#
|
|
1690
1768
|
# If `start` is negative, counts from the end:
|
|
1769
|
+
#
|
|
1691
1770
|
# a = ['a', 'b', 'c', 'd']
|
|
1692
1771
|
# a.fill(-2) { |index| "new_#{index}" } # => ["a", "b", "new_2", "new_3"]
|
|
1693
1772
|
#
|
|
1694
1773
|
# If start is too small (`start <= -array.size`, replaces all elements:
|
|
1774
|
+
#
|
|
1695
1775
|
# a = ['a', 'b', 'c', 'd']
|
|
1696
1776
|
# a.fill(-6) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"]
|
|
1697
1777
|
# a = ['a', 'b', 'c', 'd']
|
|
@@ -1703,20 +1783,24 @@ class Array[unchecked out Elem] < Object
|
|
|
1703
1783
|
#
|
|
1704
1784
|
# If `start` is in range, replaces `length` elements beginning at offset
|
|
1705
1785
|
# `start`:
|
|
1786
|
+
#
|
|
1706
1787
|
# a = ['a', 'b', 'c', 'd']
|
|
1707
1788
|
# a.fill(1, 1) { |index| "new_#{index}" } # => ["a", "new_1", "c", "d"]
|
|
1708
1789
|
#
|
|
1709
1790
|
# If start is negative, counts from the end:
|
|
1791
|
+
#
|
|
1710
1792
|
# a = ['a', 'b', 'c', 'd']
|
|
1711
1793
|
# a.fill(-2, 1) { |index| "new_#{index}" } # => ["a", "b", "new_2", "d"]
|
|
1712
1794
|
#
|
|
1713
1795
|
# If `start` is large (`start >= array.size`), extends `self` with `nil`:
|
|
1796
|
+
#
|
|
1714
1797
|
# a = ['a', 'b', 'c', 'd']
|
|
1715
1798
|
# a.fill(5, 0) { |index| "new_#{index}" } # => ["a", "b", "c", "d", nil]
|
|
1716
1799
|
# a = ['a', 'b', 'c', 'd']
|
|
1717
1800
|
# a.fill(5, 2) { |index| "new_#{index}" } # => ["a", "b", "c", "d", nil, "new_5", "new_6"]
|
|
1718
1801
|
#
|
|
1719
1802
|
# If `length` is zero or less, replaces no elements:
|
|
1803
|
+
#
|
|
1720
1804
|
# a = ['a', 'b', 'c', 'd']
|
|
1721
1805
|
# a.fill(1, 0) { |index| "new_#{index}" } # => ["a", "b", "c", "d"]
|
|
1722
1806
|
# a.fill(1, -1) { |index| "new_#{index}" } # => ["a", "b", "c", "d"]
|
|
@@ -1727,20 +1811,24 @@ class Array[unchecked out Elem] < Object
|
|
|
1727
1811
|
#
|
|
1728
1812
|
# If the range is positive and ascending (`range 0 < range.begin <= range.end`,
|
|
1729
1813
|
# replaces elements from `range.begin` to `range.end`:
|
|
1814
|
+
#
|
|
1730
1815
|
# a = ['a', 'b', 'c', 'd']
|
|
1731
1816
|
# a.fill(1..1) { |index| "new_#{index}" } # => ["a", "new_1", "c", "d"]
|
|
1732
1817
|
#
|
|
1733
1818
|
# If `range.first` is negative, does nothing:
|
|
1819
|
+
#
|
|
1734
1820
|
# a = ['a', 'b', 'c', 'd']
|
|
1735
1821
|
# a.fill(-1..1) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
|
|
1736
1822
|
#
|
|
1737
1823
|
# If `range.last` is negative, counts from the end:
|
|
1824
|
+
#
|
|
1738
1825
|
# a = ['a', 'b', 'c', 'd']
|
|
1739
1826
|
# a.fill(0..-2) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "d"]
|
|
1740
1827
|
# a = ['a', 'b', 'c', 'd']
|
|
1741
1828
|
# a.fill(1..-2) { |index| "new_#{index}" } # => ["a", "new_1", "new_2", "d"]
|
|
1742
1829
|
#
|
|
1743
1830
|
# If `range.first` and `range.last` are both negative, both count from the end:
|
|
1831
|
+
#
|
|
1744
1832
|
# a = ['a', 'b', 'c', 'd']
|
|
1745
1833
|
# a.fill(-1..-1) { |index| "new_#{index}" } # => ["a", "b", "c", "new_3"]
|
|
1746
1834
|
# a = ['a', 'b', 'c', 'd']
|
|
@@ -1756,11 +1844,13 @@ class Array[unchecked out Elem] < Object
|
|
|
1756
1844
|
# Calls the block, if given, with each element of `self`; returns a new Array
|
|
1757
1845
|
# containing those elements of `self` for which the block returns a truthy
|
|
1758
1846
|
# value:
|
|
1847
|
+
#
|
|
1759
1848
|
# a = [:foo, 'bar', 2, :bam]
|
|
1760
1849
|
# a1 = a.select {|element| element.to_s.start_with?('b') }
|
|
1761
1850
|
# a1 # => ["bar", :bam]
|
|
1762
1851
|
#
|
|
1763
1852
|
# Returns a new Enumerator if no block given:
|
|
1853
|
+
#
|
|
1764
1854
|
# a = [:foo, 'bar', 2, :bam]
|
|
1765
1855
|
# a.select # => #<Enumerator: [:foo, "bar", 2, :bam]:select>
|
|
1766
1856
|
#
|
|
@@ -1774,12 +1864,14 @@ class Array[unchecked out Elem] < Object
|
|
|
1774
1864
|
# those elements for which the block returns `false` or `nil`.
|
|
1775
1865
|
#
|
|
1776
1866
|
# Returns `self` if any elements were removed:
|
|
1867
|
+
#
|
|
1777
1868
|
# a = [:foo, 'bar', 2, :bam]
|
|
1778
1869
|
# a.select! {|element| element.to_s.start_with?('b') } # => ["bar", :bam]
|
|
1779
1870
|
#
|
|
1780
1871
|
# Returns `nil` if no elements were removed.
|
|
1781
1872
|
#
|
|
1782
1873
|
# Returns a new Enumerator if no block given:
|
|
1874
|
+
#
|
|
1783
1875
|
# a = [:foo, 'bar', 2, :bam]
|
|
1784
1876
|
# a.select! # => #<Enumerator: [:foo, "bar", 2, :bam]:select!>
|
|
1785
1877
|
#
|
|
@@ -1798,6 +1890,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1798
1890
|
#
|
|
1799
1891
|
# When argument `object` is given but no block, returns the index of the first
|
|
1800
1892
|
# element `element` for which `object == element`:
|
|
1893
|
+
#
|
|
1801
1894
|
# a = [:foo, 'bar', 2, 'bar']
|
|
1802
1895
|
# a.index('bar') # => 1
|
|
1803
1896
|
#
|
|
@@ -1806,12 +1899,14 @@ class Array[unchecked out Elem] < Object
|
|
|
1806
1899
|
# When both argument `object` and a block are given, calls the block with each
|
|
1807
1900
|
# successive element; returns the index of the first element for which the block
|
|
1808
1901
|
# returns a truthy value:
|
|
1902
|
+
#
|
|
1809
1903
|
# a = [:foo, 'bar', 2, 'bar']
|
|
1810
1904
|
# a.index {|element| element == 'bar' } # => 1
|
|
1811
1905
|
#
|
|
1812
1906
|
# Returns `nil` if the block never returns a truthy value.
|
|
1813
1907
|
#
|
|
1814
1908
|
# When neither an argument nor a block is given, returns a new Enumerator:
|
|
1909
|
+
#
|
|
1815
1910
|
# a = [:foo, 'bar', 2]
|
|
1816
1911
|
# e = a.index
|
|
1817
1912
|
# e # => #<Enumerator: [:foo, "bar", 2]:index>
|
|
@@ -1833,6 +1928,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1833
1928
|
# Returns elements from `self`; does not modify `self`.
|
|
1834
1929
|
#
|
|
1835
1930
|
# When no argument is given, returns the first element:
|
|
1931
|
+
#
|
|
1836
1932
|
# a = [:foo, 'bar', 2]
|
|
1837
1933
|
# a.first # => :foo
|
|
1838
1934
|
# a # => [:foo, "bar", 2]
|
|
@@ -1841,14 +1937,17 @@ class Array[unchecked out Elem] < Object
|
|
|
1841
1937
|
#
|
|
1842
1938
|
# When non-negative Integer argument `n` is given, returns the first `n`
|
|
1843
1939
|
# elements in a new Array:
|
|
1940
|
+
#
|
|
1844
1941
|
# a = [:foo, 'bar', 2]
|
|
1845
1942
|
# a.first(2) # => [:foo, "bar"]
|
|
1846
1943
|
#
|
|
1847
1944
|
# If `n >= array.size`, returns all elements:
|
|
1945
|
+
#
|
|
1848
1946
|
# a = [:foo, 'bar', 2]
|
|
1849
1947
|
# a.first(50) # => [:foo, "bar", 2]
|
|
1850
1948
|
#
|
|
1851
1949
|
# If `n == 0` returns an new empty Array:
|
|
1950
|
+
#
|
|
1852
1951
|
# a = [:foo, 'bar', 2]
|
|
1853
1952
|
# a.first(0) # []
|
|
1854
1953
|
#
|
|
@@ -1869,6 +1968,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1869
1968
|
#
|
|
1870
1969
|
# With non-negative Integer argument `level`, flattens recursively through
|
|
1871
1970
|
# `level` levels:
|
|
1971
|
+
#
|
|
1872
1972
|
# a = [ 0, [ 1, [2, 3], 4 ], 5 ]
|
|
1873
1973
|
# a.flatten(0) # => [0, [1, [2, 3], 4], 5]
|
|
1874
1974
|
# a = [ 0, [ 1, [2, 3], 4 ], 5 ]
|
|
@@ -1880,6 +1980,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1880
1980
|
#
|
|
1881
1981
|
# With no argument, a `nil` argument, or with negative argument `level`,
|
|
1882
1982
|
# flattens all levels:
|
|
1983
|
+
#
|
|
1883
1984
|
# a = [ 0, [ 1, [2, 3], 4 ], 5 ]
|
|
1884
1985
|
# a.flatten # => [0, 1, 2, 3, 4, 5]
|
|
1885
1986
|
# [0, 1, 2].flatten # => [0, 1, 2]
|
|
@@ -1901,6 +2002,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1901
2002
|
#
|
|
1902
2003
|
# With non-negative Integer argument `level`, flattens recursively through
|
|
1903
2004
|
# `level` levels:
|
|
2005
|
+
#
|
|
1904
2006
|
# a = [ 0, [ 1, [2, 3], 4 ], 5 ]
|
|
1905
2007
|
# a.flatten!(1) # => [0, 1, [2, 3], 4, 5]
|
|
1906
2008
|
# a = [ 0, [ 1, [2, 3], 4 ], 5 ]
|
|
@@ -1911,6 +2013,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1911
2013
|
#
|
|
1912
2014
|
# With no argument, a `nil` argument, or with negative argument `level`,
|
|
1913
2015
|
# flattens all levels:
|
|
2016
|
+
#
|
|
1914
2017
|
# a = [ 0, [ 1, [2, 3], 4 ], 5 ]
|
|
1915
2018
|
# a.flatten! # => [0, 1, 2, 3, 4, 5]
|
|
1916
2019
|
# [0, 1, 2].flatten! # => nil
|
|
@@ -1930,6 +2033,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1930
2033
|
#
|
|
1931
2034
|
# Two arrays with the same content will have the same hash code (and will
|
|
1932
2035
|
# compare using eql?):
|
|
2036
|
+
#
|
|
1933
2037
|
# [0, 1, 2].hash == [0, 1, 2].hash # => true
|
|
1934
2038
|
# [0, 1, 2].hash == [0, 1, 3].hash # => false
|
|
1935
2039
|
#
|
|
@@ -1941,6 +2045,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1941
2045
|
# -->
|
|
1942
2046
|
# Returns `true` if for some index `i` in `self`, `obj == self[i]`; otherwise
|
|
1943
2047
|
# `false`:
|
|
2048
|
+
#
|
|
1944
2049
|
# [0, 1, 2].include?(2) # => true
|
|
1945
2050
|
# [0, 1, 2].include?(3) # => false
|
|
1946
2051
|
#
|
|
@@ -1951,6 +2056,7 @@ class Array[unchecked out Elem] < Object
|
|
|
1951
2056
|
#
|
|
1952
2057
|
# When argument `object` is given but no block, returns the index of the first
|
|
1953
2058
|
# element `element` for which `object == element`:
|
|
2059
|
+
#
|
|
1954
2060
|
# a = [:foo, 'bar', 2, 'bar']
|
|
1955
2061
|
# a.index('bar') # => 1
|
|
1956
2062
|
#
|
|
@@ -1959,12 +2065,14 @@ class Array[unchecked out Elem] < Object
|
|
|
1959
2065
|
# When both argument `object` and a block are given, calls the block with each
|
|
1960
2066
|
# successive element; returns the index of the first element for which the block
|
|
1961
2067
|
# returns a truthy value:
|
|
2068
|
+
#
|
|
1962
2069
|
# a = [:foo, 'bar', 2, 'bar']
|
|
1963
2070
|
# a.index {|element| element == 'bar' } # => 1
|
|
1964
2071
|
#
|
|
1965
2072
|
# Returns `nil` if the block never returns a truthy value.
|
|
1966
2073
|
#
|
|
1967
2074
|
# When neither an argument nor a block is given, returns a new Enumerator:
|
|
2075
|
+
#
|
|
1968
2076
|
# a = [:foo, 'bar', 2]
|
|
1969
2077
|
# e = a.index
|
|
1970
2078
|
# e # => #<Enumerator: [:foo, "bar", 2]:index>
|
|
@@ -1985,15 +2093,18 @@ class Array[unchecked out Elem] < Object
|
|
|
1985
2093
|
#
|
|
1986
2094
|
# When `index` is non-negative, inserts all given `objects` before the element
|
|
1987
2095
|
# at offset `index`:
|
|
2096
|
+
#
|
|
1988
2097
|
# a = [:foo, 'bar', 2]
|
|
1989
2098
|
# a.insert(1, :bat, :bam) # => [:foo, :bat, :bam, "bar", 2]
|
|
1990
2099
|
#
|
|
1991
2100
|
# Extends the array if `index` is beyond the array (`index >= self.size`):
|
|
2101
|
+
#
|
|
1992
2102
|
# a = [:foo, 'bar', 2]
|
|
1993
2103
|
# a.insert(5, :bat, :bam)
|
|
1994
2104
|
# a # => [:foo, "bar", 2, nil, nil, :bat, :bam]
|
|
1995
2105
|
#
|
|
1996
2106
|
# Does nothing if no objects given:
|
|
2107
|
+
#
|
|
1997
2108
|
# a = [:foo, 'bar', 2]
|
|
1998
2109
|
# a.insert(1)
|
|
1999
2110
|
# a.insert(50)
|
|
@@ -2002,6 +2113,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2002
2113
|
#
|
|
2003
2114
|
# When `index` is negative, inserts all given `objects` *after* the element at
|
|
2004
2115
|
# offset `index+self.size`:
|
|
2116
|
+
#
|
|
2005
2117
|
# a = [:foo, 'bar', 2]
|
|
2006
2118
|
# a.insert(-2, :bat, :bam)
|
|
2007
2119
|
# a # => [:foo, "bar", :bat, :bam, 2]
|
|
@@ -2014,6 +2126,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2014
2126
|
# -->
|
|
2015
2127
|
# Returns the new String formed by calling method `#inspect` on each array
|
|
2016
2128
|
# element:
|
|
2129
|
+
#
|
|
2017
2130
|
# a = [:foo, 'bar', 2]
|
|
2018
2131
|
# a.inspect # => "[:foo, \"bar\", 2]"
|
|
2019
2132
|
#
|
|
@@ -2026,7 +2139,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2026
2139
|
# - ary.intersect?(other_ary) -> true or false
|
|
2027
2140
|
# -->
|
|
2028
2141
|
# Returns `true` if the array and `other_ary` have at least one element in
|
|
2029
|
-
# common, otherwise returns `false
|
|
2142
|
+
# common, otherwise returns `false`:
|
|
2030
2143
|
#
|
|
2031
2144
|
# a = [ 1, 2, 3 ]
|
|
2032
2145
|
# b = [ 3, 4, 5 ]
|
|
@@ -2043,10 +2156,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2043
2156
|
# Returns a new Array containing each element found both in `self` and in all of
|
|
2044
2157
|
# the given Arrays `other_arrays`; duplicates are omitted; items are compared
|
|
2045
2158
|
# using `eql?`:
|
|
2159
|
+
#
|
|
2046
2160
|
# [0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1]
|
|
2047
2161
|
# [0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1]
|
|
2048
2162
|
#
|
|
2049
2163
|
# Preserves order from `self`:
|
|
2164
|
+
#
|
|
2050
2165
|
# [0, 1, 2].intersection([2, 1, 0]) # => [0, 1, 2]
|
|
2051
2166
|
#
|
|
2052
2167
|
# Returns a copy of `self` if no arguments given.
|
|
@@ -2061,22 +2176,26 @@ class Array[unchecked out Elem] < Object
|
|
|
2061
2176
|
# - array.join(separator = $,) -> new_string
|
|
2062
2177
|
# -->
|
|
2063
2178
|
# Returns the new String formed by joining the array elements after conversion.
|
|
2064
|
-
# For each element `element
|
|
2179
|
+
# For each element `element`:
|
|
2180
|
+
#
|
|
2065
2181
|
# * Uses `element.to_s` if `element` is not a `kind_of?(Array)`.
|
|
2066
2182
|
# * Uses recursive `element.join(separator)` if `element` is a
|
|
2067
2183
|
# `kind_of?(Array)`.
|
|
2068
2184
|
#
|
|
2069
2185
|
#
|
|
2070
2186
|
# With no argument, joins using the output field separator, `$,`:
|
|
2187
|
+
#
|
|
2071
2188
|
# a = [:foo, 'bar', 2]
|
|
2072
2189
|
# $, # => nil
|
|
2073
2190
|
# a.join # => "foobar2"
|
|
2074
2191
|
#
|
|
2075
2192
|
# With string argument `separator`, joins using that separator:
|
|
2193
|
+
#
|
|
2076
2194
|
# a = [:foo, 'bar', 2]
|
|
2077
2195
|
# a.join("\n") # => "foo\nbar\n2"
|
|
2078
2196
|
#
|
|
2079
2197
|
# Joins recursively for nested Arrays:
|
|
2198
|
+
#
|
|
2080
2199
|
# a = [:foo, [:bar, [:baz, :bat]]]
|
|
2081
2200
|
# a.join # => "foobarbazbat"
|
|
2082
2201
|
#
|
|
@@ -2089,10 +2208,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2089
2208
|
# -->
|
|
2090
2209
|
# Retains those elements for which the block returns a truthy value; deletes all
|
|
2091
2210
|
# other elements; returns `self`:
|
|
2211
|
+
#
|
|
2092
2212
|
# a = [:foo, 'bar', 2, :bam]
|
|
2093
2213
|
# a.keep_if {|element| element.to_s.start_with?('b') } # => ["bar", :bam]
|
|
2094
2214
|
#
|
|
2095
2215
|
# Returns a new Enumerator if no block given:
|
|
2216
|
+
#
|
|
2096
2217
|
# a = [:foo, 'bar', 2, :bam]
|
|
2097
2218
|
# a.keep_if # => #<Enumerator: [:foo, "bar", 2, :bam]:keep_if>
|
|
2098
2219
|
#
|
|
@@ -2107,22 +2228,26 @@ class Array[unchecked out Elem] < Object
|
|
|
2107
2228
|
# Returns elements from `self`; `self` is not modified.
|
|
2108
2229
|
#
|
|
2109
2230
|
# When no argument is given, returns the last element:
|
|
2231
|
+
#
|
|
2110
2232
|
# a = [:foo, 'bar', 2]
|
|
2111
2233
|
# a.last # => 2
|
|
2112
2234
|
# a # => [:foo, "bar", 2]
|
|
2113
2235
|
#
|
|
2114
2236
|
# If `self` is empty, returns `nil`.
|
|
2115
2237
|
#
|
|
2116
|
-
# When non-negative
|
|
2117
|
-
#
|
|
2238
|
+
# When non-negative Integer argument `n` is given, returns the last `n` elements
|
|
2239
|
+
# in a new Array:
|
|
2240
|
+
#
|
|
2118
2241
|
# a = [:foo, 'bar', 2]
|
|
2119
2242
|
# a.last(2) # => ["bar", 2]
|
|
2120
2243
|
#
|
|
2121
2244
|
# If `n >= array.size`, returns all elements:
|
|
2245
|
+
#
|
|
2122
2246
|
# a = [:foo, 'bar', 2]
|
|
2123
2247
|
# a.last(50) # => [:foo, "bar", 2]
|
|
2124
2248
|
#
|
|
2125
2249
|
# If `n == 0`, returns an new empty Array:
|
|
2250
|
+
#
|
|
2126
2251
|
# a = [:foo, 'bar', 2]
|
|
2127
2252
|
# a.last(0) # []
|
|
2128
2253
|
#
|
|
@@ -2142,6 +2267,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2142
2267
|
# <!-- rdoc-file=array.c -->
|
|
2143
2268
|
# Calls the block, if given, with each element of `self`; returns a new Array
|
|
2144
2269
|
# whose elements are the return values from the block:
|
|
2270
|
+
#
|
|
2145
2271
|
# a = [:foo, 'bar', 2]
|
|
2146
2272
|
# a1 = a.map {|element| element.class }
|
|
2147
2273
|
# a1 # => [Symbol, String, Integer]
|
|
@@ -2158,10 +2284,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2158
2284
|
# <!-- rdoc-file=array.c -->
|
|
2159
2285
|
# Calls the block, if given, with each element; replaces the element with the
|
|
2160
2286
|
# block's return value:
|
|
2287
|
+
#
|
|
2161
2288
|
# a = [:foo, 'bar', 2]
|
|
2162
2289
|
# a.map! { |element| element.class } # => [Symbol, String, Integer]
|
|
2163
2290
|
#
|
|
2164
2291
|
# Returns a new Enumerator if no block given:
|
|
2292
|
+
#
|
|
2165
2293
|
# a = [:foo, 'bar', 2]
|
|
2166
2294
|
# a1 = a.map!
|
|
2167
2295
|
# a1 # => #<Enumerator: [:foo, "bar", 2]:map!>
|
|
@@ -2178,6 +2306,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2178
2306
|
# - array.max(n) {|a, b| ... } -> new_array
|
|
2179
2307
|
# -->
|
|
2180
2308
|
# Returns one of the following:
|
|
2309
|
+
#
|
|
2181
2310
|
# * The maximum-valued element from `self`.
|
|
2182
2311
|
# * A new Array of maximum-valued elements selected from `self`.
|
|
2183
2312
|
#
|
|
@@ -2187,10 +2316,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2187
2316
|
#
|
|
2188
2317
|
# With no argument and no block, returns the element in `self` having the
|
|
2189
2318
|
# maximum value per method `<=>`:
|
|
2319
|
+
#
|
|
2190
2320
|
# [0, 1, 2].max # => 2
|
|
2191
2321
|
#
|
|
2192
2322
|
# With an argument Integer `n` and no block, returns a new Array with at most
|
|
2193
2323
|
# `n` elements, in descending order per method `<=>`:
|
|
2324
|
+
#
|
|
2194
2325
|
# [0, 1, 2, 3].max(3) # => [3, 2, 1]
|
|
2195
2326
|
# [0, 1, 2, 3].max(6) # => [3, 2, 1, 0]
|
|
2196
2327
|
#
|
|
@@ -2198,10 +2329,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2198
2329
|
#
|
|
2199
2330
|
# With a block and no argument, calls the block `self.size-1` times to compare
|
|
2200
2331
|
# elements; returns the element having the maximum value per the block:
|
|
2332
|
+
#
|
|
2201
2333
|
# ['0', '00', '000'].max {|a, b| a.size <=> b.size } # => "000"
|
|
2202
2334
|
#
|
|
2203
2335
|
# With an argument `n` and a block, returns a new Array with at most `n`
|
|
2204
2336
|
# elements, in descending order per the block:
|
|
2337
|
+
#
|
|
2205
2338
|
# ['0', '00', '000'].max(2) {|a, b| a.size <=> b.size } # => ["000", "00"]
|
|
2206
2339
|
#
|
|
2207
2340
|
def max: () -> Elem?
|
|
@@ -2217,6 +2350,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2217
2350
|
# - array.min(n) { |a, b| ... } -> new_array
|
|
2218
2351
|
# -->
|
|
2219
2352
|
# Returns one of the following:
|
|
2353
|
+
#
|
|
2220
2354
|
# * The minimum-valued element from `self`.
|
|
2221
2355
|
# * A new Array of minimum-valued elements selected from `self`.
|
|
2222
2356
|
#
|
|
@@ -2226,10 +2360,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2226
2360
|
#
|
|
2227
2361
|
# With no argument and no block, returns the element in `self` having the
|
|
2228
2362
|
# minimum value per method `<=>`:
|
|
2363
|
+
#
|
|
2229
2364
|
# [0, 1, 2].min # => 0
|
|
2230
2365
|
#
|
|
2231
2366
|
# With Integer argument `n` and no block, returns a new Array with at most `n`
|
|
2232
2367
|
# elements, in ascending order per method `<=>`:
|
|
2368
|
+
#
|
|
2233
2369
|
# [0, 1, 2, 3].min(3) # => [0, 1, 2]
|
|
2234
2370
|
# [0, 1, 2, 3].min(6) # => [0, 1, 2, 3]
|
|
2235
2371
|
#
|
|
@@ -2237,10 +2373,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2237
2373
|
#
|
|
2238
2374
|
# With a block and no argument, calls the block `self.size-1` times to compare
|
|
2239
2375
|
# elements; returns the element having the minimum value per the block:
|
|
2376
|
+
#
|
|
2240
2377
|
# ['0', '00', '000'].min { |a, b| a.size <=> b.size } # => "0"
|
|
2241
2378
|
#
|
|
2242
2379
|
# With an argument `n` and a block, returns a new Array with at most `n`
|
|
2243
2380
|
# elements, in ascending order per the block:
|
|
2381
|
+
#
|
|
2244
2382
|
# ['0', '00', '000'].min(2) {|a, b| a.size <=> b.size } # => ["0", "00"]
|
|
2245
2383
|
#
|
|
2246
2384
|
alias min max
|
|
@@ -2256,11 +2394,13 @@ class Array[unchecked out Elem] < Object
|
|
|
2256
2394
|
# When no block is given, each element in `self` must respond to method `<=>`
|
|
2257
2395
|
# with an Integer; returns a new 2-element Array containing the minimum and
|
|
2258
2396
|
# maximum values from `self`, per method `<=>`:
|
|
2397
|
+
#
|
|
2259
2398
|
# [0, 1, 2].minmax # => [0, 2]
|
|
2260
2399
|
#
|
|
2261
2400
|
# When a block is given, the block must return an Integer; the block is called
|
|
2262
2401
|
# `self.size-1` times to compare elements; returns a new 2-element Array
|
|
2263
2402
|
# containing the minimum and maximum values from `self`, per the block:
|
|
2403
|
+
#
|
|
2264
2404
|
# ['0', '00', '000'].minmax {|a, b| a.size <=> b.size } # => ["0", "000"]
|
|
2265
2405
|
#
|
|
2266
2406
|
def minmax: () -> [ Elem?, Elem? ]
|
|
@@ -2276,6 +2416,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2276
2416
|
#
|
|
2277
2417
|
# With no block given and no argument, returns `true` if `self` has no truthy
|
|
2278
2418
|
# elements, `false` otherwise:
|
|
2419
|
+
#
|
|
2279
2420
|
# [nil, false].none? # => true
|
|
2280
2421
|
# [nil, 0, false].none? # => false
|
|
2281
2422
|
# [].none? # => true
|
|
@@ -2283,11 +2424,13 @@ class Array[unchecked out Elem] < Object
|
|
|
2283
2424
|
# With a block given and no argument, calls the block with each element in
|
|
2284
2425
|
# `self`; returns `true` if the block returns no truthy value, `false`
|
|
2285
2426
|
# otherwise:
|
|
2427
|
+
#
|
|
2286
2428
|
# [0, 1, 2].none? {|element| element > 3 } # => true
|
|
2287
2429
|
# [0, 1, 2].none? {|element| element > 1 } # => false
|
|
2288
2430
|
#
|
|
2289
2431
|
# If argument `obj` is given, returns `true` if `obj.===` no element, `false`
|
|
2290
2432
|
# otherwise:
|
|
2433
|
+
#
|
|
2291
2434
|
# ['food', 'drink'].none?(/bar/) # => true
|
|
2292
2435
|
# ['food', 'drink'].none?(/foo/) # => false
|
|
2293
2436
|
# [].none?(/foo/) # => true
|
|
@@ -2308,6 +2451,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2308
2451
|
#
|
|
2309
2452
|
# With no block given and no argument, returns `true` if `self` has exactly one
|
|
2310
2453
|
# truthy element, `false` otherwise:
|
|
2454
|
+
#
|
|
2311
2455
|
# [nil, 0].one? # => true
|
|
2312
2456
|
# [0, 0].one? # => false
|
|
2313
2457
|
# [nil, nil].one? # => false
|
|
@@ -2316,12 +2460,14 @@ class Array[unchecked out Elem] < Object
|
|
|
2316
2460
|
# With a block given and no argument, calls the block with each element in
|
|
2317
2461
|
# `self`; returns `true` if the block a truthy value for exactly one element,
|
|
2318
2462
|
# `false` otherwise:
|
|
2463
|
+
#
|
|
2319
2464
|
# [0, 1, 2].one? {|element| element > 0 } # => false
|
|
2320
2465
|
# [0, 1, 2].one? {|element| element > 1 } # => true
|
|
2321
2466
|
# [0, 1, 2].one? {|element| element > 2 } # => false
|
|
2322
2467
|
#
|
|
2323
2468
|
# If argument `obj` is given, returns `true` if `obj.===` exactly one element,
|
|
2324
2469
|
# `false` otherwise:
|
|
2470
|
+
#
|
|
2325
2471
|
# [0, 1, 2].one?(0) # => true
|
|
2326
2472
|
# [0, 0, 1].one?(0) # => false
|
|
2327
2473
|
# [1, 1, 2].one?(0) # => false
|
|
@@ -2335,140 +2481,10 @@ class Array[unchecked out Elem] < Object
|
|
|
2335
2481
|
|
|
2336
2482
|
# <!--
|
|
2337
2483
|
# rdoc-file=pack.rb
|
|
2338
|
-
# -
|
|
2339
|
-
#
|
|
2340
|
-
#
|
|
2341
|
-
#
|
|
2342
|
-
# in *aTemplateString* (see the table below) Directives ``A,'' ``a,'' and ``Z''
|
|
2343
|
-
# may be followed by a count, which gives the width of the resulting field. The
|
|
2344
|
-
# remaining directives also may take a count, indicating the number of array
|
|
2345
|
-
# elements to convert. If the count is an asterisk (```*`''), all remaining
|
|
2346
|
-
# array elements will be converted. Any of the directives ```sSiIlL`'' may be
|
|
2347
|
-
# followed by an underscore (```_`'') or exclamation mark (```!`'') to use the
|
|
2348
|
-
# underlying platform's native size for the specified type; otherwise, they use
|
|
2349
|
-
# a platform-independent size. Spaces are ignored in the template string. See
|
|
2350
|
-
# also String#unpack.
|
|
2351
|
-
#
|
|
2352
|
-
# a = [ "a", "b", "c" ]
|
|
2353
|
-
# n = [ 65, 66, 67 ]
|
|
2354
|
-
# a.pack("A3A3A3") #=> "a b c "
|
|
2355
|
-
# a.pack("a3a3a3") #=> "a\000\000b\000\000c\000\000"
|
|
2356
|
-
# n.pack("ccc") #=> "ABC"
|
|
2357
|
-
#
|
|
2358
|
-
# If *aBufferString* is specified and its capacity is enough, `pack` uses it as
|
|
2359
|
-
# the buffer and returns it. When the offset is specified by the beginning of
|
|
2360
|
-
# *aTemplateString*, the result is filled after the offset. If original contents
|
|
2361
|
-
# of *aBufferString* exists and it's longer than the offset, the rest of
|
|
2362
|
-
# *offsetOfBuffer* are overwritten by the result. If it's shorter, the gap is
|
|
2363
|
-
# filled with ```\0`''.
|
|
2364
|
-
#
|
|
2365
|
-
# # packed data is appended by default
|
|
2366
|
-
# [255].pack("C", buffer:"foo".b) #=> "foo\xFF"
|
|
2367
|
-
#
|
|
2368
|
-
# # "@0" (offset 0) specifies that packed data is filled from beginning.
|
|
2369
|
-
# # Also, original data after packed data is removed. ("oo" is removed.)
|
|
2370
|
-
# [255].pack("@0C", buffer:"foo".b) #=> "\xFF"
|
|
2371
|
-
#
|
|
2372
|
-
# # If the offset is bigger than the original length, \x00 is filled.
|
|
2373
|
-
# [255].pack("@5C", buffer:"foo".b) #=> "foo\x00\x00\xFF"
|
|
2374
|
-
#
|
|
2375
|
-
# Note that ``buffer:'' option does not guarantee not to allocate memory in
|
|
2376
|
-
# `pack`. If the capacity of *aBufferString* is not enough, `pack` allocates
|
|
2377
|
-
# memory.
|
|
2378
|
-
#
|
|
2379
|
-
# Directives for `pack`.
|
|
2380
|
-
#
|
|
2381
|
-
# Integer | Array |
|
|
2382
|
-
# Directive | Element | Meaning
|
|
2383
|
-
# ----------------------------------------------------------------------------
|
|
2384
|
-
# C | Integer | 8-bit unsigned (unsigned char)
|
|
2385
|
-
# S | Integer | 16-bit unsigned, native endian (uint16_t)
|
|
2386
|
-
# L | Integer | 32-bit unsigned, native endian (uint32_t)
|
|
2387
|
-
# Q | Integer | 64-bit unsigned, native endian (uint64_t)
|
|
2388
|
-
# J | Integer | pointer width unsigned, native endian (uintptr_t)
|
|
2389
|
-
# | | (J is available since Ruby 2.3.)
|
|
2390
|
-
# | |
|
|
2391
|
-
# c | Integer | 8-bit signed (signed char)
|
|
2392
|
-
# s | Integer | 16-bit signed, native endian (int16_t)
|
|
2393
|
-
# l | Integer | 32-bit signed, native endian (int32_t)
|
|
2394
|
-
# q | Integer | 64-bit signed, native endian (int64_t)
|
|
2395
|
-
# j | Integer | pointer width signed, native endian (intptr_t)
|
|
2396
|
-
# | | (j is available since Ruby 2.3.)
|
|
2397
|
-
# | |
|
|
2398
|
-
# S_ S! | Integer | unsigned short, native endian
|
|
2399
|
-
# I I_ I! | Integer | unsigned int, native endian
|
|
2400
|
-
# L_ L! | Integer | unsigned long, native endian
|
|
2401
|
-
# Q_ Q! | Integer | unsigned long long, native endian (ArgumentError
|
|
2402
|
-
# | | if the platform has no long long type.)
|
|
2403
|
-
# | | (Q_ and Q! is available since Ruby 2.1.)
|
|
2404
|
-
# J! | Integer | uintptr_t, native endian (same with J)
|
|
2405
|
-
# | | (J! is available since Ruby 2.3.)
|
|
2406
|
-
# | |
|
|
2407
|
-
# s_ s! | Integer | signed short, native endian
|
|
2408
|
-
# i i_ i! | Integer | signed int, native endian
|
|
2409
|
-
# l_ l! | Integer | signed long, native endian
|
|
2410
|
-
# q_ q! | Integer | signed long long, native endian (ArgumentError
|
|
2411
|
-
# | | if the platform has no long long type.)
|
|
2412
|
-
# | | (q_ and q! is available since Ruby 2.1.)
|
|
2413
|
-
# j! | Integer | intptr_t, native endian (same with j)
|
|
2414
|
-
# | | (j! is available since Ruby 2.3.)
|
|
2415
|
-
# | |
|
|
2416
|
-
# S> s> S!> s!> | Integer | same as the directives without ">" except
|
|
2417
|
-
# L> l> L!> l!> | | big endian
|
|
2418
|
-
# I!> i!> | | (available since Ruby 1.9.3)
|
|
2419
|
-
# Q> q> Q!> q!> | | "S>" is the same as "n"
|
|
2420
|
-
# J> j> J!> j!> | | "L>" is the same as "N"
|
|
2421
|
-
# | |
|
|
2422
|
-
# S< s< S!< s!< | Integer | same as the directives without "<" except
|
|
2423
|
-
# L< l< L!< l!< | | little endian
|
|
2424
|
-
# I!< i!< | | (available since Ruby 1.9.3)
|
|
2425
|
-
# Q< q< Q!< q!< | | "S<" is the same as "v"
|
|
2426
|
-
# J< j< J!< j!< | | "L<" is the same as "V"
|
|
2427
|
-
# | |
|
|
2428
|
-
# n | Integer | 16-bit unsigned, network (big-endian) byte order
|
|
2429
|
-
# N | Integer | 32-bit unsigned, network (big-endian) byte order
|
|
2430
|
-
# v | Integer | 16-bit unsigned, VAX (little-endian) byte order
|
|
2431
|
-
# V | Integer | 32-bit unsigned, VAX (little-endian) byte order
|
|
2432
|
-
# | |
|
|
2433
|
-
# U | Integer | UTF-8 character
|
|
2434
|
-
# w | Integer | BER-compressed integer
|
|
2435
|
-
#
|
|
2436
|
-
# Float | Array |
|
|
2437
|
-
# Directive | Element | Meaning
|
|
2438
|
-
# ---------------------------------------------------------------------------
|
|
2439
|
-
# D d | Float | double-precision, native format
|
|
2440
|
-
# F f | Float | single-precision, native format
|
|
2441
|
-
# E | Float | double-precision, little-endian byte order
|
|
2442
|
-
# e | Float | single-precision, little-endian byte order
|
|
2443
|
-
# G | Float | double-precision, network (big-endian) byte order
|
|
2444
|
-
# g | Float | single-precision, network (big-endian) byte order
|
|
2445
|
-
#
|
|
2446
|
-
# String | Array |
|
|
2447
|
-
# Directive | Element | Meaning
|
|
2448
|
-
# ---------------------------------------------------------------------------
|
|
2449
|
-
# A | String | arbitrary binary string (space padded, count is width)
|
|
2450
|
-
# a | String | arbitrary binary string (null padded, count is width)
|
|
2451
|
-
# Z | String | same as ``a'', except that null is added with *
|
|
2452
|
-
# B | String | bit string (MSB first)
|
|
2453
|
-
# b | String | bit string (LSB first)
|
|
2454
|
-
# H | String | hex string (high nibble first)
|
|
2455
|
-
# h | String | hex string (low nibble first)
|
|
2456
|
-
# u | String | UU-encoded string
|
|
2457
|
-
# M | String | quoted printable, MIME encoding (see also RFC2045)
|
|
2458
|
-
# | | (text mode but input must use LF and output LF)
|
|
2459
|
-
# m | String | base64 encoded string (see RFC 2045)
|
|
2460
|
-
# | | (if count is 0, no line feed are added, see RFC 4648)
|
|
2461
|
-
# | | (count specifies input bytes between each LF,
|
|
2462
|
-
# | | rounded down to nearest multiple of 3)
|
|
2463
|
-
# P | String | pointer to a structure (fixed-length string)
|
|
2464
|
-
# p | String | pointer to a null-terminated string
|
|
2465
|
-
#
|
|
2466
|
-
# Misc. | Array |
|
|
2467
|
-
# Directive | Element | Meaning
|
|
2468
|
-
# ---------------------------------------------------------------------------
|
|
2469
|
-
# @ | --- | moves to absolute position
|
|
2470
|
-
# X | --- | back up a byte
|
|
2471
|
-
# x | --- | null byte
|
|
2484
|
+
# - pack(template, buffer: nil) -> string
|
|
2485
|
+
# -->
|
|
2486
|
+
# Formats each element in `self` into a binary string; returns that string. See
|
|
2487
|
+
# [Packed Data](rdoc-ref:packed_data.rdoc).
|
|
2472
2488
|
#
|
|
2473
2489
|
def pack: (string fmt, ?buffer: String?) -> String
|
|
2474
2490
|
|
|
@@ -2487,10 +2503,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2487
2503
|
# `self`.
|
|
2488
2504
|
#
|
|
2489
2505
|
# Example:
|
|
2506
|
+
#
|
|
2490
2507
|
# a = [0, 1, 2]
|
|
2491
2508
|
# a.permutation(2) {|permutation| p permutation }
|
|
2492
2509
|
#
|
|
2493
2510
|
# Output:
|
|
2511
|
+
#
|
|
2494
2512
|
# [0, 1]
|
|
2495
2513
|
# [0, 2]
|
|
2496
2514
|
# [1, 0]
|
|
@@ -2499,10 +2517,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2499
2517
|
# [2, 1]
|
|
2500
2518
|
#
|
|
2501
2519
|
# Another example:
|
|
2520
|
+
#
|
|
2502
2521
|
# a = [0, 1, 2]
|
|
2503
2522
|
# a.permutation(3) {|permutation| p permutation }
|
|
2504
2523
|
#
|
|
2505
2524
|
# Output:
|
|
2525
|
+
#
|
|
2506
2526
|
# [0, 1, 2]
|
|
2507
2527
|
# [0, 2, 1]
|
|
2508
2528
|
# [1, 0, 2]
|
|
@@ -2511,24 +2531,29 @@ class Array[unchecked out Elem] < Object
|
|
|
2511
2531
|
# [2, 1, 0]
|
|
2512
2532
|
#
|
|
2513
2533
|
# When `n` is zero, calls the block once with a new empty Array:
|
|
2534
|
+
#
|
|
2514
2535
|
# a = [0, 1, 2]
|
|
2515
2536
|
# a.permutation(0) {|permutation| p permutation }
|
|
2516
2537
|
#
|
|
2517
2538
|
# Output:
|
|
2539
|
+
#
|
|
2518
2540
|
# []
|
|
2519
2541
|
#
|
|
2520
2542
|
# When `n` is out of range (negative or larger than `self.size`), does not call
|
|
2521
2543
|
# the block:
|
|
2544
|
+
#
|
|
2522
2545
|
# a = [0, 1, 2]
|
|
2523
2546
|
# a.permutation(-1) {|permutation| fail 'Cannot happen' }
|
|
2524
2547
|
# a.permutation(4) {|permutation| fail 'Cannot happen' }
|
|
2525
2548
|
#
|
|
2526
2549
|
# When a block given but no argument, behaves the same as
|
|
2527
2550
|
# `a.permutation(a.size)`:
|
|
2551
|
+
#
|
|
2528
2552
|
# a = [0, 1, 2]
|
|
2529
2553
|
# a.permutation {|permutation| p permutation }
|
|
2530
2554
|
#
|
|
2531
2555
|
# Output:
|
|
2556
|
+
#
|
|
2532
2557
|
# [0, 1, 2]
|
|
2533
2558
|
# [0, 2, 1]
|
|
2534
2559
|
# [1, 0, 2]
|
|
@@ -2537,6 +2562,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2537
2562
|
# [2, 1, 0]
|
|
2538
2563
|
#
|
|
2539
2564
|
# Returns a new Enumerator if no block given:
|
|
2565
|
+
#
|
|
2540
2566
|
# a = [0, 1, 2]
|
|
2541
2567
|
# a.permutation # => #<Enumerator: [0, 1, 2]:permutation>
|
|
2542
2568
|
# a.permutation(2) # => #<Enumerator: [0, 1, 2]:permutation(2)>
|
|
@@ -2553,18 +2579,21 @@ class Array[unchecked out Elem] < Object
|
|
|
2553
2579
|
#
|
|
2554
2580
|
# When no argument is given and `self` is not empty, removes and returns the
|
|
2555
2581
|
# last element:
|
|
2582
|
+
#
|
|
2556
2583
|
# a = [:foo, 'bar', 2]
|
|
2557
2584
|
# a.pop # => 2
|
|
2558
2585
|
# a # => [:foo, "bar"]
|
|
2559
2586
|
#
|
|
2560
2587
|
# Returns `nil` if the array is empty.
|
|
2561
2588
|
#
|
|
2562
|
-
# When a non-negative Integer argument `n` is given and is in range,
|
|
2563
|
-
#
|
|
2589
|
+
# When a non-negative Integer argument `n` is given and is in range,
|
|
2590
|
+
#
|
|
2591
|
+
# removes and returns the last `n` elements in a new Array:
|
|
2564
2592
|
# a = [:foo, 'bar', 2]
|
|
2565
2593
|
# a.pop(2) # => ["bar", 2]
|
|
2566
2594
|
#
|
|
2567
2595
|
# If `n` is positive and out of range, removes and returns all elements:
|
|
2596
|
+
#
|
|
2568
2597
|
# a = [:foo, 'bar', 2]
|
|
2569
2598
|
# a.pop(50) # => [:foo, "bar", 2]
|
|
2570
2599
|
#
|
|
@@ -2575,6 +2604,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2575
2604
|
|
|
2576
2605
|
# <!-- rdoc-file=array.c -->
|
|
2577
2606
|
# Prepends the given `objects` to `self`:
|
|
2607
|
+
#
|
|
2578
2608
|
# a = [:foo, 'bar', 2]
|
|
2579
2609
|
# a.unshift(:bam, :bat) # => [:bam, :bat, :foo, "bar", 2]
|
|
2580
2610
|
#
|
|
@@ -2590,13 +2620,15 @@ class Array[unchecked out Elem] < Object
|
|
|
2590
2620
|
# - array.product(*other_arrays) {|combination| ... } -> self
|
|
2591
2621
|
# -->
|
|
2592
2622
|
# Computes and returns or yields all combinations of elements from all the
|
|
2593
|
-
# Arrays, including both `self` and `other_arrays
|
|
2623
|
+
# Arrays, including both `self` and `other_arrays`:
|
|
2624
|
+
#
|
|
2594
2625
|
# * The number of combinations is the product of the sizes of all the arrays,
|
|
2595
2626
|
# including both `self` and `other_arrays`.
|
|
2596
2627
|
# * The order of the returned combinations is indeterminate.
|
|
2597
2628
|
#
|
|
2598
2629
|
#
|
|
2599
2630
|
# When no block is given, returns the combinations as an Array of Arrays:
|
|
2631
|
+
#
|
|
2600
2632
|
# a = [0, 1, 2]
|
|
2601
2633
|
# a1 = [3, 4]
|
|
2602
2634
|
# a2 = [5, 6]
|
|
@@ -2611,12 +2643,15 @@ class Array[unchecked out Elem] < Object
|
|
|
2611
2643
|
#
|
|
2612
2644
|
# If no argument is given, returns an Array of 1-element Arrays, each containing
|
|
2613
2645
|
# an element of `self`:
|
|
2646
|
+
#
|
|
2614
2647
|
# a.product # => [[0], [1], [2]]
|
|
2615
2648
|
#
|
|
2616
2649
|
# When a block is given, yields each combination as an Array; returns `self`:
|
|
2650
|
+
#
|
|
2617
2651
|
# a.product(a1) {|combination| p combination }
|
|
2618
2652
|
#
|
|
2619
2653
|
# Output:
|
|
2654
|
+
#
|
|
2620
2655
|
# [0, 3]
|
|
2621
2656
|
# [0, 4]
|
|
2622
2657
|
# [1, 3]
|
|
@@ -2625,12 +2660,15 @@ class Array[unchecked out Elem] < Object
|
|
|
2625
2660
|
# [2, 4]
|
|
2626
2661
|
#
|
|
2627
2662
|
# If any argument is an empty Array, does not call the block:
|
|
2663
|
+
#
|
|
2628
2664
|
# a.product(a1, a2, []) {|combination| fail 'Cannot happen' }
|
|
2629
2665
|
#
|
|
2630
2666
|
# If no argument is given, yields each element of `self` as a 1-element Array:
|
|
2667
|
+
#
|
|
2631
2668
|
# a.product {|combination| p combination }
|
|
2632
2669
|
#
|
|
2633
2670
|
# Output:
|
|
2671
|
+
#
|
|
2634
2672
|
# [0]
|
|
2635
2673
|
# [1]
|
|
2636
2674
|
# [2]
|
|
@@ -2647,10 +2685,12 @@ class Array[unchecked out Elem] < Object
|
|
|
2647
2685
|
# Appends trailing elements.
|
|
2648
2686
|
#
|
|
2649
2687
|
# Appends each argument in `objects` to `self`; returns `self`:
|
|
2688
|
+
#
|
|
2650
2689
|
# a = [:foo, 'bar', 2]
|
|
2651
2690
|
# a.push(:baz, :bat) # => [:foo, "bar", 2, :baz, :bat]
|
|
2652
2691
|
#
|
|
2653
2692
|
# Appends each argument as one element, even if it is another Array:
|
|
2693
|
+
#
|
|
2654
2694
|
# a = [:foo, 'bar', 2]
|
|
2655
2695
|
# a1 = a.push([:baz, :bat], [:bam, :bad])
|
|
2656
2696
|
# a1 # => [:foo, "bar", 2, [:baz, :bat], [:bam, :bad]]
|
|
@@ -2667,6 +2707,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2667
2707
|
# -->
|
|
2668
2708
|
# Returns the first element in `self` that is an Array whose second element `==`
|
|
2669
2709
|
# `obj`:
|
|
2710
|
+
#
|
|
2670
2711
|
# a = [{foo: 0}, [2, 4], [4, 5, 6], [4, 5]]
|
|
2671
2712
|
# a.rassoc(4) # => [2, 4]
|
|
2672
2713
|
#
|
|
@@ -2683,11 +2724,13 @@ class Array[unchecked out Elem] < Object
|
|
|
2683
2724
|
# -->
|
|
2684
2725
|
# Returns a new Array whose elements are all those from `self` for which the
|
|
2685
2726
|
# block returns `false` or `nil`:
|
|
2727
|
+
#
|
|
2686
2728
|
# a = [:foo, 'bar', 2, 'bat']
|
|
2687
2729
|
# a1 = a.reject {|element| element.to_s.start_with?('b') }
|
|
2688
2730
|
# a1 # => [:foo, 2]
|
|
2689
2731
|
#
|
|
2690
2732
|
# Returns a new Enumerator if no block given:
|
|
2733
|
+
#
|
|
2691
2734
|
# a = [:foo, 'bar', 2]
|
|
2692
2735
|
# a.reject # => #<Enumerator: [:foo, "bar", 2]:reject>
|
|
2693
2736
|
#
|
|
@@ -2701,12 +2744,14 @@ class Array[unchecked out Elem] < Object
|
|
|
2701
2744
|
# Removes each element for which the block returns a truthy value.
|
|
2702
2745
|
#
|
|
2703
2746
|
# Returns `self` if any elements removed:
|
|
2747
|
+
#
|
|
2704
2748
|
# a = [:foo, 'bar', 2, 'bat']
|
|
2705
2749
|
# a.reject! {|element| element.to_s.start_with?('b') } # => [:foo, 2]
|
|
2706
2750
|
#
|
|
2707
2751
|
# Returns `nil` if no elements removed.
|
|
2708
2752
|
#
|
|
2709
2753
|
# Returns a new Enumerator if no block given:
|
|
2754
|
+
#
|
|
2710
2755
|
# a = [:foo, 'bar', 2]
|
|
2711
2756
|
# a.reject! # => #<Enumerator: [:foo, "bar", 2]:reject!>
|
|
2712
2757
|
#
|
|
@@ -2727,18 +2772,22 @@ class Array[unchecked out Elem] < Object
|
|
|
2727
2772
|
# of combinations is `(n+1)(n+2)/2`.
|
|
2728
2773
|
#
|
|
2729
2774
|
# `n` = 1:
|
|
2775
|
+
#
|
|
2730
2776
|
# a = [0, 1, 2]
|
|
2731
2777
|
# a.repeated_combination(1) {|combination| p combination }
|
|
2732
2778
|
#
|
|
2733
2779
|
# Output:
|
|
2780
|
+
#
|
|
2734
2781
|
# [0]
|
|
2735
2782
|
# [1]
|
|
2736
2783
|
# [2]
|
|
2737
2784
|
#
|
|
2738
2785
|
# `n` = 2:
|
|
2786
|
+
#
|
|
2739
2787
|
# a.repeated_combination(2) {|combination| p combination }
|
|
2740
2788
|
#
|
|
2741
2789
|
# Output:
|
|
2790
|
+
#
|
|
2742
2791
|
# [0, 0]
|
|
2743
2792
|
# [0, 1]
|
|
2744
2793
|
# [0, 2]
|
|
@@ -2749,14 +2798,17 @@ class Array[unchecked out Elem] < Object
|
|
|
2749
2798
|
# If `n` is zero, calls the block once with an empty Array.
|
|
2750
2799
|
#
|
|
2751
2800
|
# If `n` is negative, does not call the block:
|
|
2801
|
+
#
|
|
2752
2802
|
# a.repeated_combination(-1) {|combination| fail 'Cannot happen' }
|
|
2753
2803
|
#
|
|
2754
2804
|
# Returns a new Enumerator if no block given:
|
|
2805
|
+
#
|
|
2755
2806
|
# a = [0, 1, 2]
|
|
2756
2807
|
# a.repeated_combination(2) # => #<Enumerator: [0, 1, 2]:combination(2)>
|
|
2757
2808
|
#
|
|
2758
2809
|
# Using Enumerators, it's convenient to show the combinations and counts for
|
|
2759
2810
|
# some values of `n`:
|
|
2811
|
+
#
|
|
2760
2812
|
# e = a.repeated_combination(0)
|
|
2761
2813
|
# e.size # => 1
|
|
2762
2814
|
# e.to_a # => [[]]
|
|
@@ -2784,18 +2836,22 @@ class Array[unchecked out Elem] < Object
|
|
|
2784
2836
|
# of permutations is `self.size**n`.
|
|
2785
2837
|
#
|
|
2786
2838
|
# `n` = 1:
|
|
2839
|
+
#
|
|
2787
2840
|
# a = [0, 1, 2]
|
|
2788
2841
|
# a.repeated_permutation(1) {|permutation| p permutation }
|
|
2789
2842
|
#
|
|
2790
2843
|
# Output:
|
|
2844
|
+
#
|
|
2791
2845
|
# [0]
|
|
2792
2846
|
# [1]
|
|
2793
2847
|
# [2]
|
|
2794
2848
|
#
|
|
2795
2849
|
# `n` = 2:
|
|
2850
|
+
#
|
|
2796
2851
|
# a.repeated_permutation(2) {|permutation| p permutation }
|
|
2797
2852
|
#
|
|
2798
2853
|
# Output:
|
|
2854
|
+
#
|
|
2799
2855
|
# [0, 0]
|
|
2800
2856
|
# [0, 1]
|
|
2801
2857
|
# [0, 2]
|
|
@@ -2809,14 +2865,17 @@ class Array[unchecked out Elem] < Object
|
|
|
2809
2865
|
# If `n` is zero, calls the block once with an empty Array.
|
|
2810
2866
|
#
|
|
2811
2867
|
# If `n` is negative, does not call the block:
|
|
2868
|
+
#
|
|
2812
2869
|
# a.repeated_permutation(-1) {|permutation| fail 'Cannot happen' }
|
|
2813
2870
|
#
|
|
2814
2871
|
# Returns a new Enumerator if no block given:
|
|
2872
|
+
#
|
|
2815
2873
|
# a = [0, 1, 2]
|
|
2816
2874
|
# a.repeated_permutation(2) # => #<Enumerator: [0, 1, 2]:permutation(2)>
|
|
2817
2875
|
#
|
|
2818
2876
|
# Using Enumerators, it's convenient to show the permutations and counts for
|
|
2819
2877
|
# some values of `n`:
|
|
2878
|
+
#
|
|
2820
2879
|
# e = a.repeated_permutation(0)
|
|
2821
2880
|
# e.size # => 1
|
|
2822
2881
|
# e.to_a # => [[]]
|
|
@@ -2833,6 +2892,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2833
2892
|
# <!-- rdoc-file=array.c -->
|
|
2834
2893
|
# Replaces the content of `self` with the content of `other_array`; returns
|
|
2835
2894
|
# `self`:
|
|
2895
|
+
#
|
|
2836
2896
|
# a = [:foo, 'bar', 2]
|
|
2837
2897
|
# a.replace(['foo', :bar, 3]) # => ["foo", :bar, 3]
|
|
2838
2898
|
#
|
|
@@ -2842,7 +2902,8 @@ class Array[unchecked out Elem] < Object
|
|
|
2842
2902
|
# rdoc-file=array.c
|
|
2843
2903
|
# - array.reverse -> new_array
|
|
2844
2904
|
# -->
|
|
2845
|
-
# Returns a new Array with the elements of `self` in reverse order
|
|
2905
|
+
# Returns a new Array with the elements of `self` in reverse order:
|
|
2906
|
+
#
|
|
2846
2907
|
# a = ['foo', 'bar', 'two']
|
|
2847
2908
|
# a1 = a.reverse
|
|
2848
2909
|
# a1 # => ["two", "bar", "foo"]
|
|
@@ -2854,6 +2915,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2854
2915
|
# - array.reverse! -> self
|
|
2855
2916
|
# -->
|
|
2856
2917
|
# Reverses `self` in place:
|
|
2918
|
+
#
|
|
2857
2919
|
# a = ['foo', 'bar', 'two']
|
|
2858
2920
|
# a.reverse! # => ["two", "bar", "foo"]
|
|
2859
2921
|
#
|
|
@@ -2868,29 +2930,35 @@ class Array[unchecked out Elem] < Object
|
|
|
2868
2930
|
#
|
|
2869
2931
|
# When a block given, passes, in reverse order, each element to the block;
|
|
2870
2932
|
# returns `self`:
|
|
2933
|
+
#
|
|
2871
2934
|
# a = [:foo, 'bar', 2]
|
|
2872
2935
|
# a.reverse_each {|element| puts "#{element.class} #{element}" }
|
|
2873
2936
|
#
|
|
2874
2937
|
# Output:
|
|
2938
|
+
#
|
|
2875
2939
|
# Integer 2
|
|
2876
2940
|
# String bar
|
|
2877
2941
|
# Symbol foo
|
|
2878
2942
|
#
|
|
2879
2943
|
# Allows the array to be modified during iteration:
|
|
2944
|
+
#
|
|
2880
2945
|
# a = [:foo, 'bar', 2]
|
|
2881
2946
|
# a.reverse_each {|element| puts element; a.clear if element.to_s.start_with?('b') }
|
|
2882
2947
|
#
|
|
2883
2948
|
# Output:
|
|
2949
|
+
#
|
|
2884
2950
|
# 2
|
|
2885
2951
|
# bar
|
|
2886
2952
|
#
|
|
2887
2953
|
# When no block given, returns a new Enumerator:
|
|
2954
|
+
#
|
|
2888
2955
|
# a = [:foo, 'bar', 2]
|
|
2889
2956
|
# e = a.reverse_each
|
|
2890
2957
|
# e # => #<Enumerator: [:foo, "bar", 2]:reverse_each>
|
|
2891
2958
|
# a1 = e.each {|element| puts "#{element.class} #{element}" }
|
|
2892
2959
|
#
|
|
2893
2960
|
# Output:
|
|
2961
|
+
#
|
|
2894
2962
|
# Integer 2
|
|
2895
2963
|
# String bar
|
|
2896
2964
|
# Symbol foo
|
|
@@ -2910,6 +2978,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2910
2978
|
#
|
|
2911
2979
|
# When argument `object` is given but no block, returns the index of the last
|
|
2912
2980
|
# such element found:
|
|
2981
|
+
#
|
|
2913
2982
|
# a = [:foo, 'bar', 2, 'bar']
|
|
2914
2983
|
# a.rindex('bar') # => 3
|
|
2915
2984
|
#
|
|
@@ -2918,6 +2987,7 @@ class Array[unchecked out Elem] < Object
|
|
|
2918
2987
|
# When a block is given but no argument, calls the block with each successive
|
|
2919
2988
|
# element; returns the index of the last element for which the block returns a
|
|
2920
2989
|
# truthy value:
|
|
2990
|
+
#
|
|
2921
2991
|
# a = [:foo, 'bar', 2, 'bar']
|
|
2922
2992
|
# a.rindex {|element| element == 'bar' } # => 3
|
|
2923
2993
|
#
|
|
@@ -2946,33 +3016,39 @@ class Array[unchecked out Elem] < Object
|
|
|
2946
3016
|
#
|
|
2947
3017
|
# When no argument given, returns a new Array that is like `self`, except that
|
|
2948
3018
|
# the first element has been rotated to the last position:
|
|
3019
|
+
#
|
|
2949
3020
|
# a = [:foo, 'bar', 2, 'bar']
|
|
2950
3021
|
# a1 = a.rotate
|
|
2951
3022
|
# a1 # => ["bar", 2, "bar", :foo]
|
|
2952
3023
|
#
|
|
2953
3024
|
# When given a non-negative Integer `count`, returns a new Array with `count`
|
|
2954
3025
|
# elements rotated from the beginning to the end:
|
|
3026
|
+
#
|
|
2955
3027
|
# a = [:foo, 'bar', 2]
|
|
2956
3028
|
# a1 = a.rotate(2)
|
|
2957
3029
|
# a1 # => [2, :foo, "bar"]
|
|
2958
3030
|
#
|
|
2959
3031
|
# If `count` is large, uses `count % array.size` as the count:
|
|
3032
|
+
#
|
|
2960
3033
|
# a = [:foo, 'bar', 2]
|
|
2961
3034
|
# a1 = a.rotate(20)
|
|
2962
3035
|
# a1 # => [2, :foo, "bar"]
|
|
2963
3036
|
#
|
|
2964
3037
|
# If `count` is zero, returns a copy of `self`, unmodified:
|
|
3038
|
+
#
|
|
2965
3039
|
# a = [:foo, 'bar', 2]
|
|
2966
3040
|
# a1 = a.rotate(0)
|
|
2967
3041
|
# a1 # => [:foo, "bar", 2]
|
|
2968
3042
|
#
|
|
2969
3043
|
# When given a negative Integer `count`, rotates in the opposite direction, from
|
|
2970
3044
|
# end to beginning:
|
|
3045
|
+
#
|
|
2971
3046
|
# a = [:foo, 'bar', 2]
|
|
2972
3047
|
# a1 = a.rotate(-2)
|
|
2973
3048
|
# a1 # => ["bar", 2, :foo]
|
|
2974
3049
|
#
|
|
2975
3050
|
# If `count` is small (far from zero), uses `count % array.size` as the count:
|
|
3051
|
+
#
|
|
2976
3052
|
# a = [:foo, 'bar', 2]
|
|
2977
3053
|
# a1 = a.rotate(-5)
|
|
2978
3054
|
# a1 # => ["bar", 2, :foo]
|
|
@@ -2988,32 +3064,38 @@ class Array[unchecked out Elem] < Object
|
|
|
2988
3064
|
# `self`.
|
|
2989
3065
|
#
|
|
2990
3066
|
# When no argument given, rotates the first element to the last position:
|
|
3067
|
+
#
|
|
2991
3068
|
# a = [:foo, 'bar', 2, 'bar']
|
|
2992
3069
|
# a.rotate! # => ["bar", 2, "bar", :foo]
|
|
2993
3070
|
#
|
|
2994
3071
|
# When given a non-negative Integer `count`, rotates `count` elements from the
|
|
2995
3072
|
# beginning to the end:
|
|
3073
|
+
#
|
|
2996
3074
|
# a = [:foo, 'bar', 2]
|
|
2997
3075
|
# a.rotate!(2)
|
|
2998
3076
|
# a # => [2, :foo, "bar"]
|
|
2999
3077
|
#
|
|
3000
3078
|
# If `count` is large, uses `count % array.size` as the count:
|
|
3079
|
+
#
|
|
3001
3080
|
# a = [:foo, 'bar', 2]
|
|
3002
3081
|
# a.rotate!(20)
|
|
3003
3082
|
# a # => [2, :foo, "bar"]
|
|
3004
3083
|
#
|
|
3005
3084
|
# If `count` is zero, returns `self` unmodified:
|
|
3085
|
+
#
|
|
3006
3086
|
# a = [:foo, 'bar', 2]
|
|
3007
3087
|
# a.rotate!(0)
|
|
3008
3088
|
# a # => [:foo, "bar", 2]
|
|
3009
3089
|
#
|
|
3010
3090
|
# When given a negative Integer `count`, rotates in the opposite direction, from
|
|
3011
3091
|
# end to beginning:
|
|
3092
|
+
#
|
|
3012
3093
|
# a = [:foo, 'bar', 2]
|
|
3013
3094
|
# a.rotate!(-2)
|
|
3014
3095
|
# a # => ["bar", 2, :foo]
|
|
3015
3096
|
#
|
|
3016
3097
|
# If `count` is small (far from zero), uses `count % array.size` as the count:
|
|
3098
|
+
#
|
|
3017
3099
|
# a = [:foo, 'bar', 2]
|
|
3018
3100
|
# a.rotate!(-5)
|
|
3019
3101
|
# a # => ["bar", 2, :foo]
|
|
@@ -3067,11 +3149,13 @@ class Array[unchecked out Elem] < Object
|
|
|
3067
3149
|
# Calls the block, if given, with each element of `self`; returns a new Array
|
|
3068
3150
|
# containing those elements of `self` for which the block returns a truthy
|
|
3069
3151
|
# value:
|
|
3152
|
+
#
|
|
3070
3153
|
# a = [:foo, 'bar', 2, :bam]
|
|
3071
3154
|
# a1 = a.select {|element| element.to_s.start_with?('b') }
|
|
3072
3155
|
# a1 # => ["bar", :bam]
|
|
3073
3156
|
#
|
|
3074
3157
|
# Returns a new Enumerator if no block given:
|
|
3158
|
+
#
|
|
3075
3159
|
# a = [:foo, 'bar', 2, :bam]
|
|
3076
3160
|
# a.select # => #<Enumerator: [:foo, "bar", 2, :bam]:select>
|
|
3077
3161
|
#
|
|
@@ -3089,12 +3173,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3089
3173
|
# those elements for which the block returns `false` or `nil`.
|
|
3090
3174
|
#
|
|
3091
3175
|
# Returns `self` if any elements were removed:
|
|
3176
|
+
#
|
|
3092
3177
|
# a = [:foo, 'bar', 2, :bam]
|
|
3093
3178
|
# a.select! {|element| element.to_s.start_with?('b') } # => ["bar", :bam]
|
|
3094
3179
|
#
|
|
3095
3180
|
# Returns `nil` if no elements were removed.
|
|
3096
3181
|
#
|
|
3097
3182
|
# Returns a new Enumerator if no block given:
|
|
3183
|
+
#
|
|
3098
3184
|
# a = [:foo, 'bar', 2, :bam]
|
|
3099
3185
|
# a.select! # => #<Enumerator: [:foo, "bar", 2, :bam]:select!>
|
|
3100
3186
|
#
|
|
@@ -3111,6 +3197,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3111
3197
|
# Removes and returns leading elements.
|
|
3112
3198
|
#
|
|
3113
3199
|
# When no argument is given, removes and returns the first element:
|
|
3200
|
+
#
|
|
3114
3201
|
# a = [:foo, 'bar', 2]
|
|
3115
3202
|
# a.shift # => :foo
|
|
3116
3203
|
# a # => ['bar', 2]
|
|
@@ -3119,12 +3206,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3119
3206
|
#
|
|
3120
3207
|
# When positive Integer argument `n` is given, removes the first `n` elements;
|
|
3121
3208
|
# returns those elements in a new Array:
|
|
3209
|
+
#
|
|
3122
3210
|
# a = [:foo, 'bar', 2]
|
|
3123
3211
|
# a.shift(2) # => [:foo, 'bar']
|
|
3124
3212
|
# a # => [2]
|
|
3125
3213
|
#
|
|
3126
3214
|
# If `n` is as large as or larger than `self.length`, removes all elements;
|
|
3127
3215
|
# returns those elements in a new Array:
|
|
3216
|
+
#
|
|
3128
3217
|
# a = [:foo, 'bar', 2]
|
|
3129
3218
|
# a.shift(3) # => [:foo, 'bar', 2]
|
|
3130
3219
|
#
|
|
@@ -3173,12 +3262,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3173
3262
|
#
|
|
3174
3263
|
# When a single Integer argument `index` is given, returns the element at offset
|
|
3175
3264
|
# `index`:
|
|
3265
|
+
#
|
|
3176
3266
|
# a = [:foo, 'bar', 2]
|
|
3177
3267
|
# a[0] # => :foo
|
|
3178
3268
|
# a[2] # => 2
|
|
3179
3269
|
# a # => [:foo, "bar", 2]
|
|
3180
3270
|
#
|
|
3181
3271
|
# If `index` is negative, counts relative to the end of `self`:
|
|
3272
|
+
#
|
|
3182
3273
|
# a = [:foo, 'bar', 2]
|
|
3183
3274
|
# a[-1] # => 2
|
|
3184
3275
|
# a[-2] # => "bar"
|
|
@@ -3187,12 +3278,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3187
3278
|
#
|
|
3188
3279
|
# When two Integer arguments `start` and `length` are given, returns a new Array
|
|
3189
3280
|
# of size `length` containing successive elements beginning at offset `start`:
|
|
3281
|
+
#
|
|
3190
3282
|
# a = [:foo, 'bar', 2]
|
|
3191
3283
|
# a[0, 2] # => [:foo, "bar"]
|
|
3192
3284
|
# a[1, 2] # => ["bar", 2]
|
|
3193
3285
|
#
|
|
3194
3286
|
# If `start + length` is greater than `self.length`, returns all elements from
|
|
3195
3287
|
# offset `start` to the end:
|
|
3288
|
+
#
|
|
3196
3289
|
# a = [:foo, 'bar', 2]
|
|
3197
3290
|
# a[0, 4] # => [:foo, "bar", 2]
|
|
3198
3291
|
# a[1, 3] # => ["bar", 2]
|
|
@@ -3204,6 +3297,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3204
3297
|
#
|
|
3205
3298
|
# When a single Range argument `range` is given, treats `range.min` as `start`
|
|
3206
3299
|
# above and `range.size` as `length` above:
|
|
3300
|
+
#
|
|
3207
3301
|
# a = [:foo, 'bar', 2]
|
|
3208
3302
|
# a[0..1] # => [:foo, "bar"]
|
|
3209
3303
|
# a[1..2] # => ["bar", 2]
|
|
@@ -3211,18 +3305,21 @@ class Array[unchecked out Elem] < Object
|
|
|
3211
3305
|
# Special case: If `range.start == a.size`, returns a new empty Array.
|
|
3212
3306
|
#
|
|
3213
3307
|
# If `range.end` is negative, calculates the end index from the end:
|
|
3308
|
+
#
|
|
3214
3309
|
# a = [:foo, 'bar', 2]
|
|
3215
3310
|
# a[0..-1] # => [:foo, "bar", 2]
|
|
3216
3311
|
# a[0..-2] # => [:foo, "bar"]
|
|
3217
3312
|
# a[0..-3] # => [:foo]
|
|
3218
3313
|
#
|
|
3219
3314
|
# If `range.start` is negative, calculates the start index from the end:
|
|
3315
|
+
#
|
|
3220
3316
|
# a = [:foo, 'bar', 2]
|
|
3221
3317
|
# a[-1..2] # => [2]
|
|
3222
3318
|
# a[-2..2] # => ["bar", 2]
|
|
3223
3319
|
# a[-3..2] # => [:foo, "bar", 2]
|
|
3224
3320
|
#
|
|
3225
3321
|
# If `range.start` is larger than the array size, returns `nil`.
|
|
3322
|
+
#
|
|
3226
3323
|
# a = [:foo, 'bar', 2]
|
|
3227
3324
|
# a[4..1] # => nil
|
|
3228
3325
|
# a[4..0] # => nil
|
|
@@ -3230,11 +3327,13 @@ class Array[unchecked out Elem] < Object
|
|
|
3230
3327
|
#
|
|
3231
3328
|
# When a single Enumerator::ArithmeticSequence argument `aseq` is given, returns
|
|
3232
3329
|
# an Array of elements corresponding to the indexes produced by the sequence.
|
|
3330
|
+
#
|
|
3233
3331
|
# a = ['--', 'data1', '--', 'data2', '--', 'data3']
|
|
3234
3332
|
# a[(1..).step(2)] # => ["data1", "data2", "data3"]
|
|
3235
3333
|
#
|
|
3236
3334
|
# Unlike slicing with range, if the start or the end of the arithmetic sequence
|
|
3237
3335
|
# is larger than array size, throws RangeError.
|
|
3336
|
+
#
|
|
3238
3337
|
# a = ['--', 'data1', '--', 'data2', '--', 'data3']
|
|
3239
3338
|
# a[(1..11).step(2)]
|
|
3240
3339
|
# # RangeError (((1..11).step(2)) out of range)
|
|
@@ -3243,6 +3342,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3243
3342
|
#
|
|
3244
3343
|
# If given a single argument, and its type is not one of the listed, tries to
|
|
3245
3344
|
# convert it to Integer, and raises if it is impossible:
|
|
3345
|
+
#
|
|
3246
3346
|
# a = [:foo, 'bar', 2]
|
|
3247
3347
|
# # Raises TypeError (no implicit conversion of Symbol into Integer):
|
|
3248
3348
|
# a[:foo]
|
|
@@ -3263,11 +3363,13 @@ class Array[unchecked out Elem] < Object
|
|
|
3263
3363
|
#
|
|
3264
3364
|
# When the only argument is an Integer `n`, removes and returns the *nth*
|
|
3265
3365
|
# element in `self`:
|
|
3366
|
+
#
|
|
3266
3367
|
# a = [:foo, 'bar', 2]
|
|
3267
3368
|
# a.slice!(1) # => "bar"
|
|
3268
3369
|
# a # => [:foo, 2]
|
|
3269
3370
|
#
|
|
3270
3371
|
# If `n` is negative, counts backwards from the end of `self`:
|
|
3372
|
+
#
|
|
3271
3373
|
# a = [:foo, 'bar', 2]
|
|
3272
3374
|
# a.slice!(-1) # => 2
|
|
3273
3375
|
# a # => [:foo, "bar"]
|
|
@@ -3277,12 +3379,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3277
3379
|
# When the only arguments are Integers `start` and `length`, removes `length`
|
|
3278
3380
|
# elements from `self` beginning at offset `start`; returns the deleted objects
|
|
3279
3381
|
# in a new Array:
|
|
3382
|
+
#
|
|
3280
3383
|
# a = [:foo, 'bar', 2]
|
|
3281
3384
|
# a.slice!(0, 2) # => [:foo, "bar"]
|
|
3282
3385
|
# a # => [2]
|
|
3283
3386
|
#
|
|
3284
3387
|
# If `start + length` exceeds the array size, removes and returns all elements
|
|
3285
3388
|
# from offset `start` to the end:
|
|
3389
|
+
#
|
|
3286
3390
|
# a = [:foo, 'bar', 2]
|
|
3287
3391
|
# a.slice!(1, 50) # => ["bar", 2]
|
|
3288
3392
|
# a # => [:foo]
|
|
@@ -3293,8 +3397,9 @@ class Array[unchecked out Elem] < Object
|
|
|
3293
3397
|
#
|
|
3294
3398
|
# When the only argument is a Range object `range`, treats `range.min` as
|
|
3295
3399
|
# `start` above and `range.size` as `length` above:
|
|
3400
|
+
#
|
|
3296
3401
|
# a = [:foo, 'bar', 2]
|
|
3297
|
-
#
|
|
3402
|
+
# a.slice!(1..2) # => ["bar", 2]
|
|
3298
3403
|
# a # => [:foo]
|
|
3299
3404
|
#
|
|
3300
3405
|
# If `range.start == a.size`, returns a new empty Array.
|
|
@@ -3302,12 +3407,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3302
3407
|
# If `range.start` is larger than the array size, returns `nil`.
|
|
3303
3408
|
#
|
|
3304
3409
|
# If `range.end` is negative, counts backwards from the end of the array:
|
|
3410
|
+
#
|
|
3305
3411
|
# a = [:foo, 'bar', 2]
|
|
3306
3412
|
# a.slice!(0..-2) # => [:foo, "bar"]
|
|
3307
3413
|
# a # => [2]
|
|
3308
3414
|
#
|
|
3309
3415
|
# If `range.start` is negative, calculates the start index backwards from the
|
|
3310
3416
|
# end of the array:
|
|
3417
|
+
#
|
|
3311
3418
|
# a = [:foo, 'bar', 2]
|
|
3312
3419
|
# a.slice!(-2..2) # => ["bar", 2]
|
|
3313
3420
|
# a # => [:foo]
|
|
@@ -3324,6 +3431,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3324
3431
|
# Returns a new Array whose elements are those from `self`, sorted.
|
|
3325
3432
|
#
|
|
3326
3433
|
# With no block, compares elements using operator `<=>` (see Comparable):
|
|
3434
|
+
#
|
|
3327
3435
|
# a = 'abcde'.split('').shuffle
|
|
3328
3436
|
# a # => ["e", "b", "d", "a", "c"]
|
|
3329
3437
|
# a1 = a.sort
|
|
@@ -3331,12 +3439,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3331
3439
|
#
|
|
3332
3440
|
# With a block, calls the block with each element pair; for each element pair
|
|
3333
3441
|
# `a` and `b`, the block should return an integer:
|
|
3442
|
+
#
|
|
3334
3443
|
# * Negative when `b` is to follow `a`.
|
|
3335
3444
|
# * Zero when `a` and `b` are equivalent.
|
|
3336
3445
|
# * Positive when `a` is to follow `b`.
|
|
3337
3446
|
#
|
|
3338
3447
|
#
|
|
3339
3448
|
# Example:
|
|
3449
|
+
#
|
|
3340
3450
|
# a = 'abcde'.split('').shuffle
|
|
3341
3451
|
# a # => ["e", "b", "d", "a", "c"]
|
|
3342
3452
|
# a1 = a.sort {|a, b| a <=> b }
|
|
@@ -3346,6 +3456,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3346
3456
|
#
|
|
3347
3457
|
# When the block returns zero, the order for `a` and `b` is indeterminate, and
|
|
3348
3458
|
# may be unstable:
|
|
3459
|
+
#
|
|
3349
3460
|
# a = 'abcde'.split('').shuffle
|
|
3350
3461
|
# a # => ["e", "b", "d", "a", "c"]
|
|
3351
3462
|
# a1 = a.sort {|a, b| 0 }
|
|
@@ -3364,6 +3475,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3364
3475
|
# Returns `self` with its elements sorted in place.
|
|
3365
3476
|
#
|
|
3366
3477
|
# With no block, compares elements using operator `<=>` (see Comparable):
|
|
3478
|
+
#
|
|
3367
3479
|
# a = 'abcde'.split('').shuffle
|
|
3368
3480
|
# a # => ["e", "b", "d", "a", "c"]
|
|
3369
3481
|
# a.sort!
|
|
@@ -3371,12 +3483,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3371
3483
|
#
|
|
3372
3484
|
# With a block, calls the block with each element pair; for each element pair
|
|
3373
3485
|
# `a` and `b`, the block should return an integer:
|
|
3486
|
+
#
|
|
3374
3487
|
# * Negative when `b` is to follow `a`.
|
|
3375
3488
|
# * Zero when `a` and `b` are equivalent.
|
|
3376
3489
|
# * Positive when `a` is to follow `b`.
|
|
3377
3490
|
#
|
|
3378
3491
|
#
|
|
3379
3492
|
# Example:
|
|
3493
|
+
#
|
|
3380
3494
|
# a = 'abcde'.split('').shuffle
|
|
3381
3495
|
# a # => ["e", "b", "d", "a", "c"]
|
|
3382
3496
|
# a.sort! {|a, b| a <=> b }
|
|
@@ -3386,6 +3500,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3386
3500
|
#
|
|
3387
3501
|
# When the block returns zero, the order for `a` and `b` is indeterminate, and
|
|
3388
3502
|
# may be unstable:
|
|
3503
|
+
#
|
|
3389
3504
|
# a = 'abcde'.split('').shuffle
|
|
3390
3505
|
# a # => ["e", "b", "d", "a", "c"]
|
|
3391
3506
|
# a.sort! {|a, b| 0 }
|
|
@@ -3409,6 +3524,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3409
3524
|
# be unstable.
|
|
3410
3525
|
#
|
|
3411
3526
|
# This example sorts strings based on their sizes:
|
|
3527
|
+
#
|
|
3412
3528
|
# a = ['aaaa', 'bbb', 'cc', 'd']
|
|
3413
3529
|
# a.sort_by! {|element| element.size }
|
|
3414
3530
|
# a # => ["d", "cc", "bbb", "aaaa"]
|
|
@@ -3427,6 +3543,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3427
3543
|
# - array.sum(init = 0) {|element| ... } -> object
|
|
3428
3544
|
# -->
|
|
3429
3545
|
# When no block is given, returns the object equivalent to:
|
|
3546
|
+
#
|
|
3430
3547
|
# sum = init
|
|
3431
3548
|
# array.each {|element| sum += element }
|
|
3432
3549
|
# sum
|
|
@@ -3434,22 +3551,26 @@ class Array[unchecked out Elem] < Object
|
|
|
3434
3551
|
# For example, `[e1, e2, e3].sum` returns `init + e1 + e2 + e3`.
|
|
3435
3552
|
#
|
|
3436
3553
|
# Examples:
|
|
3554
|
+
#
|
|
3437
3555
|
# a = [0, 1, 2, 3]
|
|
3438
3556
|
# a.sum # => 6
|
|
3439
3557
|
# a.sum(100) # => 106
|
|
3440
3558
|
#
|
|
3441
3559
|
# The elements need not be numeric, but must be `+`-compatible with each other
|
|
3442
3560
|
# and with `init`:
|
|
3561
|
+
#
|
|
3443
3562
|
# a = ['abc', 'def', 'ghi']
|
|
3444
3563
|
# a.sum('jkl') # => "jklabcdefghi"
|
|
3445
3564
|
#
|
|
3446
3565
|
# When a block is given, it is called with each element and the block's return
|
|
3447
3566
|
# value (instead of the element itself) is used as the addend:
|
|
3567
|
+
#
|
|
3448
3568
|
# a = ['zero', 1, :two]
|
|
3449
3569
|
# s = a.sum('Coerced and concatenated: ') {|element| element.to_s }
|
|
3450
3570
|
# s # => "Coerced and concatenated: zero1two"
|
|
3451
3571
|
#
|
|
3452
3572
|
# Notes:
|
|
3573
|
+
#
|
|
3453
3574
|
# * Array#join and Array#flatten may be faster than Array#sum for an Array of
|
|
3454
3575
|
# Strings or an Array of Arrays.
|
|
3455
3576
|
# * Array#sum method may not respect method redefinition of "+" methods such
|
|
@@ -3466,6 +3587,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3466
3587
|
# non-negative Integer; does not modify `self`.
|
|
3467
3588
|
#
|
|
3468
3589
|
# Examples:
|
|
3590
|
+
#
|
|
3469
3591
|
# a = [0, 1, 2, 3, 4, 5]
|
|
3470
3592
|
# a.take(1) # => [0]
|
|
3471
3593
|
# a.take(2) # => [0, 1]
|
|
@@ -3485,12 +3607,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3485
3607
|
# With a block given, calls the block with each successive element of `self`;
|
|
3486
3608
|
# stops if the block returns `false` or `nil`; returns a new Array containing
|
|
3487
3609
|
# those elements for which the block returned a truthy value:
|
|
3610
|
+
#
|
|
3488
3611
|
# a = [0, 1, 2, 3, 4, 5]
|
|
3489
3612
|
# a.take_while {|element| element < 3 } # => [0, 1, 2]
|
|
3490
3613
|
# a.take_while {|element| true } # => [0, 1, 2, 3, 4, 5]
|
|
3491
3614
|
# a # => [0, 1, 2, 3, 4, 5]
|
|
3492
3615
|
#
|
|
3493
3616
|
# With no block given, returns a new Enumerator:
|
|
3617
|
+
#
|
|
3494
3618
|
# [0, 1].take_while # => #<Enumerator: [0, 1]:take_while>
|
|
3495
3619
|
#
|
|
3496
3620
|
def take_while: () { (Elem obj) -> boolish } -> ::Array[Elem]
|
|
@@ -3501,10 +3625,12 @@ class Array[unchecked out Elem] < Object
|
|
|
3501
3625
|
# - to_a -> self or new_array
|
|
3502
3626
|
# -->
|
|
3503
3627
|
# When `self` is an instance of Array, returns `self`:
|
|
3628
|
+
#
|
|
3504
3629
|
# a = [:foo, 'bar', 2]
|
|
3505
3630
|
# a.to_a # => [:foo, "bar", 2]
|
|
3506
3631
|
#
|
|
3507
3632
|
# Otherwise, returns a new Array containing the elements of `self`:
|
|
3633
|
+
#
|
|
3508
3634
|
# class MyArray < Array; end
|
|
3509
3635
|
# a = MyArray.new(['foo', 'bar', 'two'])
|
|
3510
3636
|
# a.instance_of?(Array) # => false
|
|
@@ -3533,12 +3659,14 @@ class Array[unchecked out Elem] < Object
|
|
|
3533
3659
|
# When a block is given, calls the block with each array element; the block must
|
|
3534
3660
|
# return a 2-element Array whose two elements form a key-value pair in the
|
|
3535
3661
|
# returned Hash:
|
|
3662
|
+
#
|
|
3536
3663
|
# a = ['foo', :bar, 1, [2, 3], {baz: 4}]
|
|
3537
3664
|
# h = a.to_h {|item| [item, item] }
|
|
3538
3665
|
# h # => {"foo"=>"foo", :bar=>:bar, 1=>1, [2, 3]=>[2, 3], {:baz=>4}=>{:baz=>4}}
|
|
3539
3666
|
#
|
|
3540
3667
|
# When no block is given, `self` must be an Array of 2-element sub-arrays, each
|
|
3541
3668
|
# sub-array is formed into a key-value pair in the new Hash:
|
|
3669
|
+
#
|
|
3542
3670
|
# [].to_h # => {}
|
|
3543
3671
|
# a = [['foo', 'zero'], ['bar', 'one'], ['baz', 'two']]
|
|
3544
3672
|
# h = a.to_h
|
|
@@ -3550,6 +3678,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3550
3678
|
# <!-- rdoc-file=array.c -->
|
|
3551
3679
|
# Returns the new String formed by calling method `#inspect` on each array
|
|
3552
3680
|
# element:
|
|
3681
|
+
#
|
|
3553
3682
|
# a = [:foo, 'bar', 2]
|
|
3554
3683
|
# a.inspect # => "[:foo, \"bar\", 2]"
|
|
3555
3684
|
#
|
|
@@ -3563,6 +3692,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3563
3692
|
# -->
|
|
3564
3693
|
# Transposes the rows and columns in an Array of Arrays; the nested Arrays must
|
|
3565
3694
|
# all be the same size:
|
|
3695
|
+
#
|
|
3566
3696
|
# a = [[:a0, :a1], [:b0, :b1], [:c0, :c1]]
|
|
3567
3697
|
# a.transpose # => [[:a0, :b0, :c0], [:a1, :b1, :c1]]
|
|
3568
3698
|
#
|
|
@@ -3575,6 +3705,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3575
3705
|
# Returns a new Array that is the union of `self` and all given Arrays
|
|
3576
3706
|
# `other_arrays`; duplicates are removed; order is preserved; items are
|
|
3577
3707
|
# compared using `eql?`:
|
|
3708
|
+
#
|
|
3578
3709
|
# [0, 1, 2, 3].union([4, 5], [6, 7]) # => [0, 1, 2, 3, 4, 5, 6, 7]
|
|
3579
3710
|
# [0, 1, 1].union([2, 1], [3, 1]) # => [0, 1, 2, 3]
|
|
3580
3711
|
# [0, 1, 2, 3].union([3, 2], [1, 0]) # => [0, 1, 2, 3]
|
|
@@ -3594,13 +3725,15 @@ class Array[unchecked out Elem] < Object
|
|
|
3594
3725
|
# duplicates, the first occurrence always being retained.
|
|
3595
3726
|
#
|
|
3596
3727
|
# With no block given, identifies and omits duplicates using method `eql?` to
|
|
3597
|
-
# compare
|
|
3728
|
+
# compare:
|
|
3729
|
+
#
|
|
3598
3730
|
# a = [0, 0, 1, 1, 2, 2]
|
|
3599
3731
|
# a.uniq # => [0, 1, 2]
|
|
3600
3732
|
#
|
|
3601
3733
|
# With a block given, calls the block for each element; identifies (using method
|
|
3602
3734
|
# `eql?`) and omits duplicate values, that is, those elements for which the
|
|
3603
3735
|
# block returns the same value:
|
|
3736
|
+
#
|
|
3604
3737
|
# a = ['a', 'aa', 'aaa', 'b', 'bb', 'bbb']
|
|
3605
3738
|
# a.uniq {|element| element.size } # => ["a", "aa", "aaa"]
|
|
3606
3739
|
#
|
|
@@ -3619,6 +3752,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3619
3752
|
# compare.
|
|
3620
3753
|
#
|
|
3621
3754
|
# Returns `self` if any elements removed:
|
|
3755
|
+
#
|
|
3622
3756
|
# a = [0, 0, 1, 1, 2, 2]
|
|
3623
3757
|
# a.uniq! # => [0, 1, 2]
|
|
3624
3758
|
#
|
|
@@ -3628,6 +3762,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3628
3762
|
# `eql?`) and removes elements for which the block returns duplicate values.
|
|
3629
3763
|
#
|
|
3630
3764
|
# Returns `self` if any elements removed:
|
|
3765
|
+
#
|
|
3631
3766
|
# a = ['a', 'aa', 'aaa', 'b', 'bb', 'bbb']
|
|
3632
3767
|
# a.uniq! {|element| element.size } # => ['a', 'aa', 'aaa']
|
|
3633
3768
|
#
|
|
@@ -3641,6 +3776,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3641
3776
|
# - array.unshift(*objects) -> self
|
|
3642
3777
|
# -->
|
|
3643
3778
|
# Prepends the given `objects` to `self`:
|
|
3779
|
+
#
|
|
3644
3780
|
# a = [:foo, 'bar', 2]
|
|
3645
3781
|
# a.unshift(:bam, :bat) # => [:bam, :bat, :foo, "bar", 2]
|
|
3646
3782
|
#
|
|
@@ -3658,30 +3794,36 @@ class Array[unchecked out Elem] < Object
|
|
|
3658
3794
|
# Integer or Range `indexes`.
|
|
3659
3795
|
#
|
|
3660
3796
|
# For each positive `index`, returns the element at offset `index`:
|
|
3797
|
+
#
|
|
3661
3798
|
# a = [:foo, 'bar', 2]
|
|
3662
3799
|
# a.values_at(0, 2) # => [:foo, 2]
|
|
3663
3800
|
# a.values_at(0..1) # => [:foo, "bar"]
|
|
3664
3801
|
#
|
|
3665
3802
|
# The given `indexes` may be in any order, and may repeat:
|
|
3803
|
+
#
|
|
3666
3804
|
# a = [:foo, 'bar', 2]
|
|
3667
3805
|
# a.values_at(2, 0, 1, 0, 2) # => [2, :foo, "bar", :foo, 2]
|
|
3668
3806
|
# a.values_at(1, 0..2) # => ["bar", :foo, "bar", 2]
|
|
3669
3807
|
#
|
|
3670
3808
|
# Assigns `nil` for an `index` that is too large:
|
|
3809
|
+
#
|
|
3671
3810
|
# a = [:foo, 'bar', 2]
|
|
3672
3811
|
# a.values_at(0, 3, 1, 3) # => [:foo, nil, "bar", nil]
|
|
3673
3812
|
#
|
|
3674
3813
|
# Returns a new empty Array if no arguments given.
|
|
3675
3814
|
#
|
|
3676
3815
|
# For each negative `index`, counts backward from the end of the array:
|
|
3816
|
+
#
|
|
3677
3817
|
# a = [:foo, 'bar', 2]
|
|
3678
3818
|
# a.values_at(-1, -3) # => [2, :foo]
|
|
3679
3819
|
#
|
|
3680
3820
|
# Assigns `nil` for an `index` that is too small:
|
|
3821
|
+
#
|
|
3681
3822
|
# a = [:foo, 'bar', 2]
|
|
3682
3823
|
# a.values_at(0, -5, 1, -6, 2) # => [:foo, nil, "bar", nil, 2]
|
|
3683
3824
|
#
|
|
3684
3825
|
# The given `indexes` may have a mixture of signs:
|
|
3826
|
+
#
|
|
3685
3827
|
# a = [:foo, 'bar', 2]
|
|
3686
3828
|
# a.values_at(0, -2, 1, -1) # => [:foo, "bar", "bar", 2]
|
|
3687
3829
|
#
|
|
@@ -3697,11 +3839,13 @@ class Array[unchecked out Elem] < Object
|
|
|
3697
3839
|
#
|
|
3698
3840
|
# Each nested array `new_array[n]` is of size `other_arrays.size+1`, and
|
|
3699
3841
|
# contains:
|
|
3842
|
+
#
|
|
3700
3843
|
# * The *nth* element of `self`.
|
|
3701
3844
|
# * The *nth* element of each of the `other_arrays`.
|
|
3702
3845
|
#
|
|
3703
3846
|
#
|
|
3704
3847
|
# If all `other_arrays` and `self` are the same size:
|
|
3848
|
+
#
|
|
3705
3849
|
# a = [:a0, :a1, :a2, :a3]
|
|
3706
3850
|
# b = [:b0, :b1, :b2, :b3]
|
|
3707
3851
|
# c = [:c0, :c1, :c2, :c3]
|
|
@@ -3710,6 +3854,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3710
3854
|
#
|
|
3711
3855
|
# If any array in `other_arrays` is smaller than `self`, fills to `self.size`
|
|
3712
3856
|
# with `nil`:
|
|
3857
|
+
#
|
|
3713
3858
|
# a = [:a0, :a1, :a2, :a3]
|
|
3714
3859
|
# b = [:b0, :b1, :b2]
|
|
3715
3860
|
# c = [:c0, :c1]
|
|
@@ -3718,6 +3863,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3718
3863
|
#
|
|
3719
3864
|
# If any array in `other_arrays` is larger than `self`, its trailing elements
|
|
3720
3865
|
# are ignored:
|
|
3866
|
+
#
|
|
3721
3867
|
# a = [:a0, :a1, :a2, :a3]
|
|
3722
3868
|
# b = [:b0, :b1, :b2, :b3, :b4]
|
|
3723
3869
|
# c = [:c0, :c1, :c2, :c3, :c4, :c5]
|
|
@@ -3725,22 +3871,24 @@ class Array[unchecked out Elem] < Object
|
|
|
3725
3871
|
# d # => [[:a0, :b0, :c0], [:a1, :b1, :c1], [:a2, :b2, :c2], [:a3, :b3, :c3]]
|
|
3726
3872
|
#
|
|
3727
3873
|
# When a block is given, calls the block with each of the sub-arrays (formed as
|
|
3728
|
-
# above); returns nil
|
|
3874
|
+
# above); returns `nil`:
|
|
3875
|
+
#
|
|
3729
3876
|
# a = [:a0, :a1, :a2, :a3]
|
|
3730
3877
|
# b = [:b0, :b1, :b2, :b3]
|
|
3731
3878
|
# c = [:c0, :c1, :c2, :c3]
|
|
3732
3879
|
# a.zip(b, c) {|sub_array| p sub_array} # => nil
|
|
3733
3880
|
#
|
|
3734
3881
|
# Output:
|
|
3882
|
+
#
|
|
3735
3883
|
# [:a0, :b0, :c0]
|
|
3736
3884
|
# [:a1, :b1, :c1]
|
|
3737
3885
|
# [:a2, :b2, :c2]
|
|
3738
3886
|
# [:a3, :b3, :c3]
|
|
3739
3887
|
#
|
|
3740
|
-
def zip: [U] (
|
|
3741
|
-
| (
|
|
3742
|
-
| [U] (
|
|
3743
|
-
| (
|
|
3888
|
+
def zip: [U] (_Each[U] arg) -> Array[[ Elem, U? ]]
|
|
3889
|
+
| (_Each[untyped] arg, *_Each[untyped] args) -> Array[Array[untyped]]
|
|
3890
|
+
| [U] (_Each[U] arg) { ([ Elem, U? ]) -> void } -> nil
|
|
3891
|
+
| (_Each[untyped] arg, *_Each[untyped] args) { (Array[untyped]) -> void } -> nil
|
|
3744
3892
|
|
|
3745
3893
|
# <!--
|
|
3746
3894
|
# rdoc-file=array.c
|
|
@@ -3748,6 +3896,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3748
3896
|
# -->
|
|
3749
3897
|
# Returns the union of `array` and Array `other_array`; duplicates are removed;
|
|
3750
3898
|
# order is preserved; items are compared using `eql?`:
|
|
3899
|
+
#
|
|
3751
3900
|
# [0, 1] | [2, 3] # => [0, 1, 2, 3]
|
|
3752
3901
|
# [0, 1, 1] | [2, 2, 3] # => [0, 1, 2, 3]
|
|
3753
3902
|
# [0, 1, 2] | [3, 2, 1, 0] # => [0, 1, 2, 3]
|
|
@@ -3764,6 +3913,7 @@ class Array[unchecked out Elem] < Object
|
|
|
3764
3913
|
# -->
|
|
3765
3914
|
# Replaces the content of `self` with the content of `other_array`; returns
|
|
3766
3915
|
# `self`:
|
|
3916
|
+
#
|
|
3767
3917
|
# a = [:foo, 'bar', 2]
|
|
3768
3918
|
# a.replace(['foo', :bar, 3]) # => ["foo", :bar, 3]
|
|
3769
3919
|
#
|