sixarm_ruby_ramp 4.1.0 → 4.2.2
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
- checksums.yaml.gz.sig +0 -0
- data/README.md +30 -6
- data/VERSION +1 -1
- data/lib/sixarm_ruby_ramp/array/join.rb +67 -0
- data/lib/sixarm_ruby_ramp/array/shuffle.rb +49 -0
- data/lib/sixarm_ruby_ramp/array.rb +14 -121
- data/lib/sixarm_ruby_ramp/enumerable/map.rb +114 -0
- data/lib/sixarm_ruby_ramp/enumerable/nitems.rb +66 -0
- data/lib/sixarm_ruby_ramp/enumerable/select.rb +50 -0
- data/lib/sixarm_ruby_ramp/enumerable.rb +1 -124
- data/lib/sixarm_ruby_ramp/integer/rbit.rb +23 -0
- data/lib/sixarm_ruby_ramp.rb +30 -1
- data/test/sixarm_ruby_ramp_test/array/join_test.rb +37 -0
- data/test/sixarm_ruby_ramp_test/array/shuffle_test.rb +26 -0
- data/test/sixarm_ruby_ramp_test/array_test.rb +10 -59
- data/test/sixarm_ruby_ramp_test/enumerable/map_test.rb +42 -0
- data/test/sixarm_ruby_ramp_test/enumerable/nitems_test.rb +48 -0
- data/test/sixarm_ruby_ramp_test/enumerable/select_test.rb +33 -0
- data/test/sixarm_ruby_ramp_test/enumerable_test.rb +0 -136
- data/test/sixarm_ruby_ramp_test/integer/rbit_test.rb +43 -0
- data/test/sixarm_ruby_ramp_test/integer_test.rb +0 -1
- data/test/sixarm_ruby_ramp_test.rb +30 -1
- data.tar.gz.sig +0 -0
- metadata +55 -22
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a821169d3c371f60d7d48f2084ee1b6cceceecd9
|
4
|
+
data.tar.gz: 96510d04fe9d8bb4d695c3e101cab563653310c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5ece89814f03fd98c3c2f1d87d682828a90ba79e48d7a4122be16bc2af3ee208ab36f2de4c0ef3d247c8c65af482b46a3710a6a980cf80bf66eb037de170209
|
7
|
+
data.tar.gz: 601811bc53253b62be8c3c8ef88f653f78c72c9bc6101954c7109a3bc91369141fa543de13910fc3ead9981b8145c408442c7f83b430d4e59ef6ea28e0582352
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -28,7 +28,7 @@ Install:
|
|
28
28
|
|
29
29
|
Bundler:
|
30
30
|
|
31
|
-
gem "sixarm_ruby_ramp", ">=4.
|
31
|
+
gem "sixarm_ruby_ramp", ">=4.2.2", "<5"
|
32
32
|
|
33
33
|
Require:
|
34
34
|
|
@@ -54,7 +54,6 @@ To install with high security:
|
|
54
54
|
* choice, choices: one or more random elements from an array
|
55
55
|
* cross: return the cross pairings of an array with another array
|
56
56
|
* divvy: divides an array, like a pie, into a specified number of slices (deprecated - see method rdoc)
|
57
|
-
* join, join_prefix_suffix, join_prefix_suffix_infix: like Array#join with improvements
|
58
57
|
* onto: return a hash that maps an array's keys on to another array's values
|
59
58
|
* rotate: moves the first element of an array to the end
|
60
59
|
* rest: return the rest of the items of the array (aka cdr, aka shifted)
|
@@ -67,6 +66,13 @@ To install with high security:
|
|
67
66
|
* union: builds an array containing each of the unique elements of sub-arrays ([[1,2,3,4],[2,3,4,5],[3,4,5,6]].union => [1,2,3,4,5,6])
|
68
67
|
|
69
68
|
|
69
|
+
### Array join
|
70
|
+
|
71
|
+
* join: enhances #join with optional prefix, suffix, and infix.
|
72
|
+
* join_prefix_suffix: join with a prefix and suffix.
|
73
|
+
* join_prefix_suffix_infix: join with a prefix, suffix, and infix.
|
74
|
+
|
75
|
+
|
70
76
|
## Class
|
71
77
|
|
72
78
|
* publicize_methods: make all methods public for a block, e.g. to unit test private methods
|
@@ -93,13 +99,28 @@ To install with high security:
|
|
93
99
|
* join: forwards to self.to_a.join
|
94
100
|
* to_h: convert the object to a hash by mapping each item to a key=>value pair.
|
95
101
|
* to_h_merge: convert the object to a hash by mapping each item to a key=>value pair, merging any duplicate keys.
|
102
|
+
* power_set: return an array with all subsets of the enum's elements
|
103
|
+
|
104
|
+
|
105
|
+
### Enumerable map
|
106
|
+
|
96
107
|
* map_id: return the id of an Enumerable object; *requires* that the object respond to an 'id' message
|
97
108
|
* map_to_a, map_to_f, map_to_i, map_to_s, map_to_sym: convert each object to a specific type by calling its respective method to_a, to_i, to_f, to_s, to_sym
|
98
109
|
* map_with_index: for each item, yield to a block with the item and its incrementing index
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
110
|
+
|
111
|
+
|
112
|
+
### Enumerable nitems
|
113
|
+
|
114
|
+
* nitems_while: the number of leading elements for which block is truthy.
|
115
|
+
* nitems_until: the number of leading elements for which block is falsey.
|
116
|
+
* nitems_with_index: the number of leading elements for which block with index is truthy.
|
117
|
+
|
118
|
+
|
119
|
+
### Enumerable select
|
120
|
+
|
121
|
+
* select_while: return an array of the leading elements for which block is truthy.
|
122
|
+
* select_until: return an array of the leading elements for which block is falsey.
|
123
|
+
* select_with_index: return an array of the leading elements for which block with index is truthy.
|
103
124
|
|
104
125
|
|
105
126
|
## File
|
@@ -131,6 +152,7 @@ To install with high security:
|
|
131
152
|
|
132
153
|
## Integer
|
133
154
|
|
155
|
+
* rbit: reverse bit
|
134
156
|
* maps: syntactic sugar to yield n times to a block, returning an array of any results
|
135
157
|
* odd?: is the number odd?
|
136
158
|
|
@@ -229,6 +251,8 @@ Extensions that help debug Ruby programs.
|
|
229
251
|
|
230
252
|
## Changes
|
231
253
|
|
254
|
+
* 2015-03-14 4.2.1 Conditionally load `Array#shuffle*`
|
255
|
+
* 2015-03-14 4.2.0 Add `Integer#rbit`
|
232
256
|
* 2015-01-13 4.1.0 Fix Enumerable `to_h` and add `to_h_merge`
|
233
257
|
* 2015-01-13 4.0.1 Fix for Process.ps keys
|
234
258
|
* 2014-12-17 4.0.0 Add `Pairable` methods; change semantics of `Hash#map_pair`; change `to_h` for Ruby 2.2.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.2.2
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class Array
|
2
|
+
|
3
|
+
# Alias join because we're going to override it
|
4
|
+
alias :ruby_join :join
|
5
|
+
|
6
|
+
# Concatenate the items into a string by join.
|
7
|
+
#
|
8
|
+
# @return [String] concatenated string
|
9
|
+
#
|
10
|
+
# @example Join with infix
|
11
|
+
# list=['a','b','c']
|
12
|
+
# list.join("*") => "a*b*c"
|
13
|
+
#
|
14
|
+
# @example Join with prefix and suffix
|
15
|
+
# list=['a','b','c']
|
16
|
+
# list.join("[","]") => "[a][b][c]"
|
17
|
+
#
|
18
|
+
# @example Join with prefix, suffix, and infix
|
19
|
+
# list=['a','b','c']
|
20
|
+
# list.join("*","[","]") => "[a]*[b]*[c]"
|
21
|
+
#
|
22
|
+
def join(*fixes)
|
23
|
+
if fixes.is_a?(String) then return self.ruby_join(fixes) end
|
24
|
+
return case fixes.size
|
25
|
+
when 0
|
26
|
+
ruby_join
|
27
|
+
when 1
|
28
|
+
ruby_join(fixes[0].to_s)
|
29
|
+
when 2
|
30
|
+
join_prefix_suffix(*fixes)
|
31
|
+
when 3
|
32
|
+
join_prefix_suffix_infix(*fixes)
|
33
|
+
else
|
34
|
+
raise ArgumentError, "join() takes 0-3 arguments; you gave #{fixes.size}]"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Concatenate the items by joining using a prefix string and suffix string.
|
39
|
+
#
|
40
|
+
# @return [String] concatenated string
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# list=['a','b','c']
|
44
|
+
# list.join("[","]") => "[a][b][c]"
|
45
|
+
#
|
46
|
+
def join_prefix_suffix(prefix, suffix)
|
47
|
+
prefix = prefix.to_s
|
48
|
+
suffix = suffix.to_s
|
49
|
+
return self.map{|item| prefix + item.to_s + suffix}.ruby_join()
|
50
|
+
end
|
51
|
+
|
52
|
+
# Concatenate the items by joining using a prefix string, suffix string, and infix string.
|
53
|
+
#
|
54
|
+
# @return [String] concatenated string
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# list=['a','b','c']
|
58
|
+
# list.join("*","[","]") => "[a]*[b]*[c]"
|
59
|
+
#
|
60
|
+
def join_prefix_suffix_infix(prefix, suffix, infix)
|
61
|
+
prefix = prefix.to_s
|
62
|
+
suffix = suffix.to_s
|
63
|
+
infix = infix.to_s
|
64
|
+
return self.map{|item| prefix + item.to_s + suffix}.ruby_join(infix)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
class Array
|
4
|
+
|
5
|
+
unless method_defined? :shuffle
|
6
|
+
|
7
|
+
# Randomly arrange the array items.
|
8
|
+
#
|
9
|
+
# @return [Array] a new array with the items shuffled.
|
10
|
+
#
|
11
|
+
# This implementation is optimized for speed, not for memory use.
|
12
|
+
# See http://codeidol.com/other/rubyckbk/Arrays/Shuffling-an-Array/
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# list=
|
16
|
+
# list=['a','b','c']
|
17
|
+
# list.shuffle!
|
18
|
+
# list => ['c','a','b']
|
19
|
+
|
20
|
+
def shuffle
|
21
|
+
dup.shuffle!
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
unless method_defined? :shuffle!
|
27
|
+
|
28
|
+
# Randomly arrange the array items.
|
29
|
+
#
|
30
|
+
# @return [Array] the array, with its items shuffled.
|
31
|
+
#
|
32
|
+
# This implementation is optimized for speed, not for memory use.
|
33
|
+
# See http://codeidol.com/other/rubyckbk/Arrays/Shuffling-an-Array/
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# list=
|
37
|
+
# list=['a','b','c']
|
38
|
+
# list.shuffle!
|
39
|
+
# list => ['c','a','b']
|
40
|
+
|
41
|
+
def shuffle!
|
42
|
+
each_index do |i|
|
43
|
+
j = rand(length-i) + i
|
44
|
+
self[j], self[i] = self[i], self[j]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -1,78 +1,8 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
|
3
2
|
require 'csv'
|
4
|
-
|
5
|
-
# Array extensions
|
6
3
|
|
7
4
|
class Array
|
8
5
|
|
9
|
-
|
10
|
-
# Alias join because we're going to override it
|
11
|
-
|
12
|
-
alias :ruby_join :join
|
13
|
-
|
14
|
-
|
15
|
-
# Concatenate the items into a string by join.
|
16
|
-
#
|
17
|
-
# @return [String] concatenated string
|
18
|
-
#
|
19
|
-
# @example Join with infix
|
20
|
-
# list=['a','b','c']
|
21
|
-
# list.join("*") => "a*b*c"
|
22
|
-
#
|
23
|
-
# @example Join with prefix and suffix
|
24
|
-
# list=['a','b','c']
|
25
|
-
# list.join("[","]") => "[a][b][c]"
|
26
|
-
#
|
27
|
-
# @example Join with prefix, suffix, and infix
|
28
|
-
# list=['a','b','c']
|
29
|
-
# list.join("*","[","]") => "[a]*[b]*[c]"
|
30
|
-
#
|
31
|
-
def join(*fixes)
|
32
|
-
if fixes.is_a?(String) then return self.ruby_join(fixes) end
|
33
|
-
return case fixes.size
|
34
|
-
when 0
|
35
|
-
ruby_join
|
36
|
-
when 1
|
37
|
-
ruby_join(fixes[0].to_s)
|
38
|
-
when 2
|
39
|
-
join_prefix_suffix(*fixes)
|
40
|
-
when 3
|
41
|
-
join_prefix_suffix_infix(*fixes)
|
42
|
-
else
|
43
|
-
raise ArgumentError, "join() takes 0-3 arguments; you gave #{fixes.size}]"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Concatenate the items by joining using a prefix string and suffix string.
|
48
|
-
#
|
49
|
-
# @return [String] concatenated string
|
50
|
-
#
|
51
|
-
# @example
|
52
|
-
# list=['a','b','c']
|
53
|
-
# list.join("[","]") => "[a][b][c]"
|
54
|
-
#
|
55
|
-
def join_prefix_suffix(prefix, suffix)
|
56
|
-
prefix = prefix.to_s
|
57
|
-
suffix = suffix.to_s
|
58
|
-
return self.map{|item| prefix + item.to_s + suffix}.ruby_join()
|
59
|
-
end
|
60
|
-
|
61
|
-
# Concatenate the items by joining using a prefix string, suffix string, and infix string.
|
62
|
-
#
|
63
|
-
# @return [String] concatenated string
|
64
|
-
#
|
65
|
-
# @example
|
66
|
-
# list=['a','b','c']
|
67
|
-
# list.join("*","[","]") => "[a]*[b]*[c]"
|
68
|
-
#
|
69
|
-
def join_prefix_suffix_infix(prefix, suffix, infix)
|
70
|
-
prefix = prefix.to_s
|
71
|
-
suffix = suffix.to_s
|
72
|
-
infix = infix.to_s
|
73
|
-
return self.map{|item| prefix + item.to_s + suffix}.ruby_join(infix)
|
74
|
-
end
|
75
|
-
|
76
6
|
# @return [Boolean] true if size > 0
|
77
7
|
#
|
78
8
|
# @example
|
@@ -92,7 +22,7 @@ class Array
|
|
92
22
|
# [].rotate! => []
|
93
23
|
#
|
94
24
|
# @return [Array] self
|
95
|
-
|
25
|
+
|
96
26
|
def rotate!
|
97
27
|
if size>0
|
98
28
|
push item=shift
|
@@ -100,7 +30,7 @@ class Array
|
|
100
30
|
self
|
101
31
|
end
|
102
32
|
|
103
|
-
|
33
|
+
|
104
34
|
# @return [Object] a random item from the array
|
105
35
|
#
|
106
36
|
# @example
|
@@ -109,7 +39,7 @@ class Array
|
|
109
39
|
# [1,2,3,4].choice => 3
|
110
40
|
#
|
111
41
|
# Implemented in Ruby 1.9
|
112
|
-
|
42
|
+
|
113
43
|
def choice
|
114
44
|
self[Kernel.rand(size)]
|
115
45
|
end
|
@@ -120,7 +50,7 @@ class Array
|
|
120
50
|
# @example
|
121
51
|
# [1,2,3,4].choices(2) => [3,1]
|
122
52
|
# [1,2,3,4].choices(3) => [4,2,3]
|
123
|
-
|
53
|
+
|
124
54
|
def choices(count)
|
125
55
|
arr = Array.new
|
126
56
|
count.times { arr << self.choice }
|
@@ -139,13 +69,13 @@ class Array
|
|
139
69
|
# This is identical to calling foo.zip(values).to_h
|
140
70
|
|
141
71
|
def onto(values)
|
142
|
-
size==values.size or raise ArgumentError, "Array size #{size} must match values size #{size}"
|
72
|
+
size==values.size or raise ArgumentError, "Array size #{size} must match values size #{size}"
|
143
73
|
zip(values).to_h
|
144
74
|
end
|
145
75
|
|
146
76
|
|
147
77
|
##############################################################
|
148
|
-
#
|
78
|
+
#
|
149
79
|
# GROUPINGS
|
150
80
|
#
|
151
81
|
##############################################################
|
@@ -166,12 +96,12 @@ class Array
|
|
166
96
|
|
167
97
|
|
168
98
|
##############################################################
|
169
|
-
#
|
99
|
+
#
|
170
100
|
# COMBINATIONS
|
171
101
|
#
|
172
102
|
##############################################################
|
173
103
|
|
174
|
-
|
104
|
+
|
175
105
|
# @return [Array] the union of the array's items.
|
176
106
|
#
|
177
107
|
# In typical use, each item is an array.
|
@@ -212,10 +142,10 @@ class Array
|
|
212
142
|
inject{|inj,item| inj & item.to_a } || []
|
213
143
|
end
|
214
144
|
|
215
|
-
|
145
|
+
|
216
146
|
|
217
147
|
##############################################################
|
218
|
-
#
|
148
|
+
#
|
219
149
|
# LIST PROCESSING
|
220
150
|
#
|
221
151
|
##############################################################
|
@@ -256,7 +186,7 @@ class Array
|
|
256
186
|
# Delete the first _number_of_items_ items.
|
257
187
|
#
|
258
188
|
# @return [Array] the array, minus the deleted items.
|
259
|
-
#
|
189
|
+
#
|
260
190
|
# @example
|
261
191
|
# list=['a','b','c']
|
262
192
|
# list.shifted!
|
@@ -280,45 +210,8 @@ class Array
|
|
280
210
|
alias :rest! :shifted!
|
281
211
|
|
282
212
|
|
283
|
-
# Randomly arrange the array items.
|
284
|
-
#
|
285
|
-
# @return [Array] the array, with its items shuffled.
|
286
|
-
#
|
287
|
-
# This implementation is optimized for speed, not for memory use.
|
288
|
-
# See http://codeidol.com/other/rubyckbk/Arrays/Shuffling-an-Array/
|
289
|
-
#
|
290
|
-
# @example
|
291
|
-
# list=
|
292
|
-
# list=['a','b','c']
|
293
|
-
# list.shuffle!
|
294
|
-
# list => ['c','a','b']
|
295
|
-
|
296
|
-
def shuffle!
|
297
|
-
each_index do |i|
|
298
|
-
j = rand(length-i) + i
|
299
|
-
self[j], self[i] = self[i], self[j]
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
|
304
|
-
# @return [Array] a new array with the items shuffled.
|
305
|
-
#
|
306
|
-
# This implementation is optimized for speed, not for memory use.
|
307
|
-
# See http://codeidol.com/other/rubyckbk/Arrays/Shuffling-an-Array/
|
308
|
-
#
|
309
|
-
# @example
|
310
|
-
# list=
|
311
|
-
# list=['a','b','c']
|
312
|
-
# list.shuffle!
|
313
|
-
# list => ['c','a','b']
|
314
|
-
|
315
|
-
def shuffle
|
316
|
-
dup.shuffle!
|
317
|
-
end
|
318
|
-
|
319
|
-
|
320
213
|
##############################################################
|
321
|
-
#
|
214
|
+
#
|
322
215
|
# CASTS
|
323
216
|
#
|
324
217
|
##############################################################
|
@@ -334,7 +227,7 @@ class Array
|
|
334
227
|
# [[1,2,3],[4,5,6]] => "1,2,3\n4,5,6\n"
|
335
228
|
#
|
336
229
|
# @example of a blank array
|
337
|
-
#
|
230
|
+
#
|
338
231
|
# [].to_csv => ""
|
339
232
|
#
|
340
233
|
# N.b. this method uses the multi-dimensional if the
|
@@ -368,7 +261,7 @@ class Array
|
|
368
261
|
# Each subarray becomes one 'line' in the output.
|
369
262
|
#
|
370
263
|
# @example of a blank array
|
371
|
-
#
|
264
|
+
#
|
372
265
|
# [].to_csv => ""
|
373
266
|
|
374
267
|
def to_tsv(ops={})
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module Enumerable
|
3
|
+
|
4
|
+
# Map each item => item.id
|
5
|
+
#
|
6
|
+
# @return [Enumerable<Object>] an list of each item.id
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# users = User.find(:all)
|
10
|
+
# users.map_id => [1,2,3,4,...]
|
11
|
+
#
|
12
|
+
# A typical use is to convert a list of ActiveRecord items to a list of id items.
|
13
|
+
#
|
14
|
+
# This method is a faster way to get the same results as items.map(&:id)
|
15
|
+
#
|
16
|
+
def map_id
|
17
|
+
map{|item| item.id}
|
18
|
+
end
|
19
|
+
|
20
|
+
# Map each item => item.to_a
|
21
|
+
#
|
22
|
+
# @return [Enumberable<Array<Object>>] a list of each item.to_a
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
# hashes = [{1=>2, 3=>4},{5=>6, 7=>8}]
|
26
|
+
# hashes.map_to_a => [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
|
27
|
+
#
|
28
|
+
# This method is a faster way to get the same results as items.map(&:to_a)
|
29
|
+
#
|
30
|
+
def map_to_a
|
31
|
+
map{|item| item.to_a}
|
32
|
+
end
|
33
|
+
|
34
|
+
# Map each item => item.to_f
|
35
|
+
#
|
36
|
+
# @return [Enumerable<Float>] a list of each item.to_f
|
37
|
+
#
|
38
|
+
# @example
|
39
|
+
# strings = ["1","2","3"]
|
40
|
+
# strings.map_to_f => [1.0, 2.0, 3.0]
|
41
|
+
#
|
42
|
+
# A typical use is to convert a list of String items to a list of float items.
|
43
|
+
#
|
44
|
+
# This method is a fast way to get the same results as items.map(&:to_f)
|
45
|
+
#
|
46
|
+
def map_to_f
|
47
|
+
map{|item| item.to_f}
|
48
|
+
end
|
49
|
+
|
50
|
+
# Map each item => item.to_i
|
51
|
+
#
|
52
|
+
# @return [Enumerable<Integer>] a list of each item.to_i
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# strings = ["1","2","3"]
|
56
|
+
# strings.map_to_i => [1, 2, 3]
|
57
|
+
#
|
58
|
+
# A typical use is to convert a list of String items to a list of integer items.
|
59
|
+
#
|
60
|
+
# This method is a fast way to get the same results as items.map(&:to_i)
|
61
|
+
#
|
62
|
+
def map_to_i
|
63
|
+
map{|item| item.to_i}
|
64
|
+
end
|
65
|
+
|
66
|
+
# Map each item => item.to_s
|
67
|
+
#
|
68
|
+
# @return [Enumerable<String>] a list of each item.to_s
|
69
|
+
#
|
70
|
+
# @example
|
71
|
+
# numbers = [1, 2, 3]
|
72
|
+
# numbers.map_to_s => ["1", "2", "3"]
|
73
|
+
#
|
74
|
+
# A typical use is to convert a list of Numeric items to a list of String items.
|
75
|
+
#
|
76
|
+
# This method is a fast way to get the same results as items.map(&:to_s)
|
77
|
+
#
|
78
|
+
def map_to_s
|
79
|
+
map{|item| item.to_s}
|
80
|
+
end
|
81
|
+
|
82
|
+
# Map each item => item.to_sym
|
83
|
+
#
|
84
|
+
# @return [Enumerable<Symbol>] a list of each item.to_sym
|
85
|
+
#
|
86
|
+
# @example
|
87
|
+
# strings = ["foo", "goo", "hoo"]
|
88
|
+
# strings.map_to_sym => [:foo, :goo, :hoo]
|
89
|
+
#
|
90
|
+
# A typical use is to convert a list of Object items to a list of Symbol items.
|
91
|
+
#
|
92
|
+
# This method is a fast way to get the same results as items.map(&:to_sym)
|
93
|
+
#
|
94
|
+
def map_to_sym
|
95
|
+
map{|item| item.to_sym}
|
96
|
+
end
|
97
|
+
|
98
|
+
# Map each item and its index => a new output
|
99
|
+
#
|
100
|
+
# @return [Enumerable<Object>] an list of each item transformed by the block
|
101
|
+
# @see Enumerable#map
|
102
|
+
# @see Enumerable#each_with_index
|
103
|
+
#
|
104
|
+
# @example
|
105
|
+
# strings = ["a", "b", "c"]
|
106
|
+
# strings.map_with_index{|string,index| "#{string}#{index}"}
|
107
|
+
# => ["a0, "b1", "c3"]
|
108
|
+
#
|
109
|
+
def map_with_index
|
110
|
+
index=-1
|
111
|
+
map{|item| index+=1; yield(item,index)}
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module Enumerable
|
3
|
+
|
4
|
+
# @example
|
5
|
+
# enum.nitems?(n) {| obj | block }
|
6
|
+
# => true iff the block is not false or nil num times
|
7
|
+
#
|
8
|
+
# @return [Boolean] true iff the block is not false or nil num times
|
9
|
+
#
|
10
|
+
def nitems?(n)
|
11
|
+
num = 0
|
12
|
+
each{|item|
|
13
|
+
if yield(item)
|
14
|
+
num+=1
|
15
|
+
if num > n then return false end
|
16
|
+
end
|
17
|
+
}
|
18
|
+
return num==n
|
19
|
+
end
|
20
|
+
|
21
|
+
# @example
|
22
|
+
# enum.nitems_while {| obj | block }
|
23
|
+
# => number of items
|
24
|
+
#
|
25
|
+
# @return [Integer] the number of leading elements for which block is not false or nil.
|
26
|
+
#
|
27
|
+
def nitems_while
|
28
|
+
num = 0
|
29
|
+
each{|item| yield(item) ? (num+=1) : break}
|
30
|
+
return num
|
31
|
+
end
|
32
|
+
|
33
|
+
# @example
|
34
|
+
# enum.nitems_until {| obj | block }
|
35
|
+
# => number of items
|
36
|
+
#
|
37
|
+
# @return [Integer] the number of leading elements for which block is false.
|
38
|
+
#
|
39
|
+
def nitems_until
|
40
|
+
num = 0
|
41
|
+
each{|item|
|
42
|
+
if yield(item)
|
43
|
+
break
|
44
|
+
else
|
45
|
+
num+=1
|
46
|
+
end
|
47
|
+
}
|
48
|
+
return num
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# Calls block with two arguments, the item and its index, for each item in enum.
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# enum.nitems_with_index {|obj,i| block }
|
56
|
+
# => number of items
|
57
|
+
#
|
58
|
+
# @return [Integer] the number of leading elements for which block is true.
|
59
|
+
#
|
60
|
+
def nitems_with_index
|
61
|
+
index = 0
|
62
|
+
each{|item| yield(item,index) ? (index+=1) : break}
|
63
|
+
return index
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module Enumerable
|
3
|
+
|
4
|
+
# @example
|
5
|
+
# enum.select_while {|obj| block }
|
6
|
+
# => array
|
7
|
+
#
|
8
|
+
# @return [Array<Object>] the leading elements for which block is not false or nil.
|
9
|
+
#
|
10
|
+
def select_while
|
11
|
+
arr = []
|
12
|
+
each{|item| yield(item) ? (arr << item) : break}
|
13
|
+
return arr
|
14
|
+
end
|
15
|
+
|
16
|
+
# @example
|
17
|
+
# enum.select_until {|obj| block }
|
18
|
+
# => array
|
19
|
+
#
|
20
|
+
# @return [Array<Object>] the leading elements for which block is false or nil.
|
21
|
+
#
|
22
|
+
def select_until
|
23
|
+
arr = []
|
24
|
+
each{|item| yield(item) ? break : (arr << item)}
|
25
|
+
return arr
|
26
|
+
end
|
27
|
+
|
28
|
+
# Calls block with two arguments, the item and its index, for each item in enum.
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# enum.select_with_index {|obj,i| block }
|
32
|
+
# => array
|
33
|
+
#
|
34
|
+
# @return [Array<Object> the leading elements for which block is not false or nil.
|
35
|
+
#
|
36
|
+
def select_with_index
|
37
|
+
index = 0
|
38
|
+
arr = []
|
39
|
+
each{|item|
|
40
|
+
if yield(item,index)
|
41
|
+
arr << item
|
42
|
+
index+=1
|
43
|
+
else
|
44
|
+
break
|
45
|
+
end
|
46
|
+
}
|
47
|
+
return arr
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|