tbpgr_utils 0.0.29 → 0.0.30
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.
- data/README.md +52 -1
- data/lib/open_classes/array.rb +524 -484
- data/lib/tbpgr_utils/version.rb +1 -1
- data/spec/open_classes/array_spec.rb +95 -1
- metadata +12 -12
data/README.md
CHANGED
@@ -32,6 +32,7 @@ Or install it yourself as:
|
|
32
32
|
|[TbpgrUtils Array#together_empty?](#arraytogether_empty) |together version of Array#empty?. together_empty? has alias :tempty? |
|
33
33
|
|[TbpgrUtils Array#together_fill](#arraytogether_fill) |together version of Array#fill. together_fill has alias :tfill |
|
34
34
|
|[TbpgrUtils Array#together_first](#arraytogether_first) |together version of Array#first. together_first has alias :tfirst |
|
35
|
+
|[TbpgrUtils Array#together_include?](#arraytogether_include) |together version of Array#include?. together_include? has alias :tinclude? |
|
35
36
|
|[TbpgrUtils Array#together_map](#arraytogether_mapor-tmap-together_collect-tcollect) |together version of Enumerable#map. together_map has aliases [:tmap, :together_collect, :tcollect] |
|
36
37
|
|[TbpgrUtils Array#together_map!](#arraytogether_map-1or-tmap-1-together_collect-1-tcollect-1) |together version of Enumerable#map!. together_map! has aliases [:tmap!, :together_collect!, :tcollect!] |
|
37
38
|
|[TbpgrUtils Array#together_reduce](#arraytogether_reduceor-treduce-together_inject-tinject) |together version of Enumerable#reduce. together_reduce has aliases [:treduce, :together_inject, :tinject] |
|
@@ -41,7 +42,7 @@ Or install it yourself as:
|
|
41
42
|
|[AttributesInitializable::ClassMethods.attr_accessor_init](#attributesinitializableclassmethodsattr_accessor_init) |generate attr_accessor + initializer |
|
42
43
|
|[AttributesInitializable::ClassMethods.attr_reader_init](#attributesinitializableclassmethodsattr_reader_init) |generate attr_reader + initializer |
|
43
44
|
|[AttributesInitializable::ClassMethods.attr_writer init](#attributesinitializableclassmethodsattr_writer_init) |generate attr_writer + initializer |
|
44
|
-
|[TbpgrUtils File.insert_bom](#fileinsert_bom) |insert BOM to UTF-8 File
|
45
|
+
|[TbpgrUtils File.insert_bom](#fileinsert_bom) |insert BOM to UTF-8 File |
|
45
46
|
|[Ghostable module](#ghostable) |help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name) |
|
46
47
|
|[TbpgrUtils Kernel#bulk_define_methods](#kernelbulk_define_methods) |define methods to classes. methods have simple return value. |
|
47
48
|
|[TestToolbox Kernel#capture_stdout](#kernelcapture_stdout) |capture STDOUT |
|
@@ -328,6 +329,55 @@ print ret # => [[*1..5], [*6..10]]
|
|
328
329
|
|
329
330
|
[back to list](#list)
|
330
331
|
|
332
|
+
### Array#together_include?
|
333
|
+
together_include? is bulk version of Array#include?
|
334
|
+
|
335
|
+
together_include? has alias :tinclude?
|
336
|
+
|
337
|
+
both include single ret case
|
338
|
+
~~~ruby
|
339
|
+
lists = [[*1..5], [*5..9]]
|
340
|
+
ret = lists.together_include? 5
|
341
|
+
print ret # => true
|
342
|
+
~~~
|
343
|
+
|
344
|
+
one include single ret case
|
345
|
+
~~~ruby
|
346
|
+
lists = [[*1..5], [*5..9]]
|
347
|
+
ret = lists.together_include? 9
|
348
|
+
print ret # => true
|
349
|
+
~~~
|
350
|
+
|
351
|
+
both not include single ret case
|
352
|
+
~~~ruby
|
353
|
+
lists = [[*1..5], [*5..9]]
|
354
|
+
ret = lists.together_include? 10
|
355
|
+
print ret # => false
|
356
|
+
~~~
|
357
|
+
|
358
|
+
both include multi ret case
|
359
|
+
~~~ruby
|
360
|
+
lists = [[*1..5], [*5..9]]
|
361
|
+
ret = lists.together_include? 5, true
|
362
|
+
print ret # => [true, true]
|
363
|
+
~~~
|
364
|
+
|
365
|
+
one include multi ret case
|
366
|
+
~~~ruby
|
367
|
+
lists = [[*1..5], [*5..9]]
|
368
|
+
ret = lists.together_include? 9, true
|
369
|
+
print ret # => [false, true]
|
370
|
+
~~~
|
371
|
+
|
372
|
+
both not include multi ret case
|
373
|
+
~~~ruby
|
374
|
+
lists = [[*1..5], [*5..9]]
|
375
|
+
ret = lists.together_include? 10, true
|
376
|
+
print ret # => [false, false]
|
377
|
+
~~~
|
378
|
+
|
379
|
+
[back to list](#list)
|
380
|
+
|
331
381
|
### Array#together_map(or tmap, together_collect, tcollect)
|
332
382
|
~~~ruby
|
333
383
|
require 'tbpgr_utils'
|
@@ -1071,6 +1121,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
|
|
1071
1121
|
https://github.com/tbpgr/tbpgr_utils_snippets
|
1072
1122
|
|
1073
1123
|
## History
|
1124
|
+
* version 0.0.30 : add Array#together_include?(alias tinclude?).
|
1074
1125
|
* version 0.0.29 : add Array#together_first(alias tfirst).
|
1075
1126
|
* version 0.0.28 : add Array#together_fill(alias tfill). add File.insert_bom.
|
1076
1127
|
* version 0.0.27 : add Array#together_empty?(alias tempty?)
|
data/lib/open_classes/array.rb
CHANGED
@@ -1,484 +1,524 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'open_classes/object'
|
3
|
-
require 'open_classes/module'
|
4
|
-
|
5
|
-
# Array
|
6
|
-
class Array
|
7
|
-
# Arrays loop together.
|
8
|
-
#
|
9
|
-
# alpha = %w{one two three}
|
10
|
-
# numbers = %w{1 2 3}
|
11
|
-
# [alpha, numbers].together do |first, second|
|
12
|
-
# print "#{first}:#{second}\n" # => output one:1, two:2, three:3
|
13
|
-
# end
|
14
|
-
def together
|
15
|
-
if_not_contain_array_rails_type_error
|
16
|
-
first.each_with_index do |i_v, i|
|
17
|
-
eval_each_str = get_args_str_for_together i
|
18
|
-
instance_eval "yield(#{eval_each_str})"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Arrays loop together with index.
|
23
|
-
#
|
24
|
-
# alpha = %w{one two three}
|
25
|
-
# numbers = %w{1 2 3}
|
26
|
-
# [alpha, numbers].together_with_index do |first, second, index|
|
27
|
-
# print "#{index.to_s}:#{first}:#{second}\n" # => output 0:one:1, 1:two:2, 2:three:3
|
28
|
-
# end
|
29
|
-
def together_with_index
|
30
|
-
if_not_contain_array_rails_type_error
|
31
|
-
first.each_with_index do |i_v, i|
|
32
|
-
eval_each_str = get_args_str_for_together i, true
|
33
|
-
instance_eval "yield(#{eval_each_str})"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Arrays together map.
|
38
|
-
#
|
39
|
-
# together_map has aliases [:tmap, :together_collect, :tcollect]
|
40
|
-
#
|
41
|
-
# if you want to single Array return
|
42
|
-
# alpha = %w{one two three}
|
43
|
-
# numbers = %w{1 2 3}
|
44
|
-
# print [alpha, numbers].together_map do |first, second|
|
45
|
-
# "#{first}:#{second}\n"
|
46
|
-
# end # => output one:1, two:2, three:3
|
47
|
-
#
|
48
|
-
# if you want to multi Array return
|
49
|
-
# alpha = %w{one two three}
|
50
|
-
# numbers = %w{1 2 3}
|
51
|
-
# print [alpha, numbers].together_map do |first, second|
|
52
|
-
# ["#{first}:#{second}", "#{second}:#{first}"]
|
53
|
-
# end # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
54
|
-
def together_map
|
55
|
-
if_not_contain_array_rails_type_error
|
56
|
-
ret = []
|
57
|
-
first.each_with_index do |i_v, i|
|
58
|
-
eval_each_str = get_args_str_for_together i
|
59
|
-
each_ret = instance_eval "yield(#{eval_each_str})"
|
60
|
-
ret = set_together_each_return_map(ret, each_ret, i)
|
61
|
-
end
|
62
|
-
ret
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
# Arrays together map!.
|
67
|
-
#
|
68
|
-
# together_map! has aliases [:tmap!, :together_collect!, :tcollect!]
|
69
|
-
#
|
70
|
-
# if you want to single Array return
|
71
|
-
# alpha = %w{one two three}
|
72
|
-
# numbers = %w{1 2 3}
|
73
|
-
# ary = [alpha, numbers]
|
74
|
-
# ret = ary.together_map! do |first, second|
|
75
|
-
# "#{first}:#{second}"
|
76
|
-
# end
|
77
|
-
# print ret # => output ['one:1', 'two:2', 'three:3']
|
78
|
-
# print ary # => output ['one:1', 'two:2', 'three:3']
|
79
|
-
#
|
80
|
-
# if you want to multi Array return
|
81
|
-
# alpha = %w{one two three}
|
82
|
-
# numbers = %w{1 2 3}
|
83
|
-
# ary = [alpha, numbers]
|
84
|
-
# ret = ary.together_map! do |first, second|
|
85
|
-
# ["#{first}:#{second}", "#{second}:#{first}"]
|
86
|
-
# end
|
87
|
-
# print ret # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
88
|
-
# print ary # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
89
|
-
def together_map!
|
90
|
-
if_not_contain_array_rails_type_error
|
91
|
-
ret = []
|
92
|
-
first.each_with_index do |i_v, i|
|
93
|
-
eval_each_str = get_args_str_for_together i
|
94
|
-
each_ret = instance_eval "yield(#{eval_each_str})"
|
95
|
-
ret = set_together_each_return_map(ret, each_ret, i)
|
96
|
-
end
|
97
|
-
clear
|
98
|
-
ret.each { |v|self << v }
|
99
|
-
end
|
100
|
-
|
101
|
-
# Arrays loop together select.
|
102
|
-
#
|
103
|
-
# together_select has aliases [:tselect, :together_find_all, :tfindall]
|
104
|
-
#
|
105
|
-
# if you want to single Array return
|
106
|
-
# firsts = [1, 2, 3, 4]
|
107
|
-
# seconds = [4, 2, 3, 1]
|
108
|
-
# ret = [firsts, seconds].together_select{|first, second|first == second}
|
109
|
-
# print ret # => output [[2, 3], [2, 3]]
|
110
|
-
#
|
111
|
-
# if you want to multi Array return
|
112
|
-
# firsts = [1, 2, 3, 4]
|
113
|
-
# seconds = [4, 2, 3, 1]
|
114
|
-
# ret = [firsts, seconds].together_select{|first, second|[first.odd?, second.even?]}
|
115
|
-
# print ret # => output [[1, 3], [4, 2]]
|
116
|
-
def together_select
|
117
|
-
if_not_contain_array_rails_type_error
|
118
|
-
ret = []
|
119
|
-
first.each_with_index do |i_v, i|
|
120
|
-
eval_each_str = get_args_str_for_together i
|
121
|
-
each_ret = instance_eval "yield(#{eval_each_str})"
|
122
|
-
ret = set_together_each_return_select(ret, each_ret, i)
|
123
|
-
end
|
124
|
-
ret
|
125
|
-
end
|
126
|
-
|
127
|
-
# Arrays loop together reduce.
|
128
|
-
#
|
129
|
-
# together_reduce has aliases [:treduce, :together_inject, :tinject]
|
130
|
-
#
|
131
|
-
# if you want to single return
|
132
|
-
# firsts = [1, 2, 3, 4]
|
133
|
-
# seconds = [4, 2, 3, 1]
|
134
|
-
# ret = [firsts, seconds].together_reduce{|memo, first, second|memo + first + second}
|
135
|
-
# print ret # => output 20
|
136
|
-
#
|
137
|
-
# if you want to single return with init value
|
138
|
-
# firsts = [1, 2, 3, 4]
|
139
|
-
# seconds = [4, 2, 3, 1]
|
140
|
-
# ret = [firsts, seconds].together_reduce(10){|memo, first, second|memo + first + second}
|
141
|
-
# print ret # => output 30
|
142
|
-
#
|
143
|
-
# if you want to single return with init string value
|
144
|
-
# firsts = %w{a b c}
|
145
|
-
# seconds = %w{1 2 3}
|
146
|
-
# ret = [firsts, seconds].together_reduce('start-'){|memo, first, second|memo + first + second}
|
147
|
-
# print ret # => output 'start-a1b2c3'
|
148
|
-
#
|
149
|
-
# if you want to single return with init Array value
|
150
|
-
# firsts = [1, 2, 3, 4]
|
151
|
-
# seconds = [4, 2, 3, 1]
|
152
|
-
# ret = [firsts, seconds].together_reduce([]){|memo, first, second|memo << first + second}
|
153
|
-
# print ret # => output [5, 4, 6, 5]
|
154
|
-
#
|
155
|
-
# if you want to single return with init Hash value
|
156
|
-
# firsts = [1, 2, 3, 4]
|
157
|
-
# seconds = [4, 2, 3, 1]
|
158
|
-
# ret = [firsts, seconds].together_reduce({}){|memo, first, second|memo[first] = second;memo}
|
159
|
-
# print ret # => output {1=>4, 2=>2, 3=>3, 4=>1}
|
160
|
-
def together_reduce(init = nil)
|
161
|
-
if_not_contain_array_rails_type_error
|
162
|
-
memo = initial_memo init
|
163
|
-
first.each_with_index do |i_v, i|
|
164
|
-
eval_each_str = get_args_str_for_together i
|
165
|
-
memo = instance_eval "yield(memo, #{eval_each_str})"
|
166
|
-
end
|
167
|
-
memo
|
168
|
-
end
|
169
|
-
|
170
|
-
# Arrays bulk concat.
|
171
|
-
#
|
172
|
-
# together_concat has alias :tconcat
|
173
|
-
#
|
174
|
-
# alpha = %w{one two three}
|
175
|
-
# numbers = %w{1 2 3}
|
176
|
-
# [alpha, numbers].together do |first, second|
|
177
|
-
# print "#{first}:#{second}\n" # => output one:1, two:2, three:3
|
178
|
-
# end
|
179
|
-
def together_concat(other)
|
180
|
-
if_not_contain_array_rails_type_error
|
181
|
-
each { |list|list.concat other }
|
182
|
-
end
|
183
|
-
|
184
|
-
# Arrays bulk at.
|
185
|
-
#
|
186
|
-
# together_at has alias :tat
|
187
|
-
#
|
188
|
-
# same elements size case
|
189
|
-
# alpha = %w{one two three}
|
190
|
-
# numbers = %w{1 2 3}
|
191
|
-
# [alpha, numbers].together_at 2 # => output ['three', 3]
|
192
|
-
#
|
193
|
-
# different elements size case
|
194
|
-
# alpha = %w{one two three}
|
195
|
-
# numbers = %w{1 2}
|
196
|
-
# [alpha, numbers].together_at 2 # => output ['three', nil]
|
197
|
-
def together_at(index)
|
198
|
-
if_not_contain_array_rails_type_error
|
199
|
-
reduce([]) { |ats, list|ats << list.at(index) }
|
200
|
-
end
|
201
|
-
|
202
|
-
# Arrays bulk clear.
|
203
|
-
#
|
204
|
-
# together_clear has alias :tclear
|
205
|
-
#
|
206
|
-
# same elements size case
|
207
|
-
# alpha = %w{one two three}
|
208
|
-
# numbers = %w{1 2 3}
|
209
|
-
# [alpha, numbers].together_clear # => output [[],[]]
|
210
|
-
def together_clear
|
211
|
-
if_not_contain_array_rails_type_error
|
212
|
-
each { |list|list.clear }
|
213
|
-
end
|
214
|
-
|
215
|
-
# Arrays bulk compact.(immutable)
|
216
|
-
#
|
217
|
-
# together_compact has alias :tcompact
|
218
|
-
#
|
219
|
-
# same elements size case
|
220
|
-
# alpha = ['a','b','c', nil,'d']
|
221
|
-
# numbers = [1, 2, nil, 3]
|
222
|
-
# lists = [alpha, numbers]
|
223
|
-
# ret = lists.together_compact
|
224
|
-
# print lists # => output [['a','b','c', nil,'d'], [1, 2, nil, 3]]
|
225
|
-
# print ret # => output [['a','b','c','d'], [1, 2, 3]]
|
226
|
-
def together_compact
|
227
|
-
if_not_contain_array_rails_type_error
|
228
|
-
reduce([]) { |ret, list|ret << list.compact }
|
229
|
-
end
|
230
|
-
|
231
|
-
# Arrays bulk compact!.(mutable)
|
232
|
-
#
|
233
|
-
# together_compact! has alias :tcompact!
|
234
|
-
#
|
235
|
-
# same elements size case
|
236
|
-
# alpha = ['a','b','c', nil,'d']
|
237
|
-
# numbers = [1, 2, nil, 3]
|
238
|
-
# lists = [alpha, numbers]
|
239
|
-
# ret = lists.together_compact!
|
240
|
-
# print lists # => output [['a','b','c','d'], [1, 2, 3]]
|
241
|
-
# print ret # => output [['a','b','c','d'], [1, 2, 3]]
|
242
|
-
def together_compact!
|
243
|
-
if_not_contain_array_rails_type_error
|
244
|
-
each { |list|list.compact! }
|
245
|
-
end
|
246
|
-
|
247
|
-
# Arrays bulk delete.
|
248
|
-
#
|
249
|
-
# together_delete has alias :tdelete
|
250
|
-
#
|
251
|
-
# if delete target is exist
|
252
|
-
# child1 = [1, 2, 3, 4]
|
253
|
-
# child2 = [2, 3, 4, 5]
|
254
|
-
# lists = [child1, child2]
|
255
|
-
# ret = lists.together_delete 2
|
256
|
-
# print ret # => 2
|
257
|
-
# print lists # => output [[1, 3, 4], [3, 4, 5]]
|
258
|
-
#
|
259
|
-
# if delete target is not exist
|
260
|
-
# child1 = [1, 2, 3, 4]
|
261
|
-
# child2 = [2, 3, 4, 5]
|
262
|
-
# lists = [child1, child2]
|
263
|
-
# ret = lists.together_delete 6
|
264
|
-
# print ret # => nil
|
265
|
-
# print lists # => output [[1, 2, 3, 4], [2, 3, 4, 5]]
|
266
|
-
#
|
267
|
-
# if delete target is not exist and use block
|
268
|
-
# child1 = [1, 2, 3, 4]
|
269
|
-
# child2 = [2, 3, 4, 5]
|
270
|
-
# lists = [child1, child2]
|
271
|
-
# ret = lists.together_delete(6) { 999 }
|
272
|
-
# print ret # => 999
|
273
|
-
# print lists # => output [[1, 2, 3, 4], [2, 3, 4, 5]]
|
274
|
-
def together_delete(value)
|
275
|
-
if_not_contain_array_rails_type_error
|
276
|
-
ret = []
|
277
|
-
each { |list|ret << list.delete(value) }
|
278
|
-
default_return = block_given? ? yield : nil
|
279
|
-
ret.compact.size == 0 ? default_return : value
|
280
|
-
end
|
281
|
-
|
282
|
-
# Arrays bulk delete_at.
|
283
|
-
#
|
284
|
-
# together_delete_at has alias :tdelete_at
|
285
|
-
#
|
286
|
-
# if delete_at target is exist
|
287
|
-
# child1 = [1, 2, 3, 4]
|
288
|
-
# child2 = [2, 3, 4, 5]
|
289
|
-
# lists = [child1, child2]
|
290
|
-
# ret = lists.together_delete_at 2
|
291
|
-
# print ret # => [3, 4]
|
292
|
-
# print lists # => output [[1, 2, 4], [2, 3, 5]]
|
293
|
-
#
|
294
|
-
# if delete_at target is not exist
|
295
|
-
# child1 = [1, 2, 3, 4]
|
296
|
-
# child2 = [2, 3, 4, 5]
|
297
|
-
# lists = [child1, child2]
|
298
|
-
# ret = lists.together_delete_at 6
|
299
|
-
# print ret # => [nil, nil]
|
300
|
-
# print lists # => output [[1, 2, 3, 4], [2, 3, 4, 5]]
|
301
|
-
#
|
302
|
-
# if delete_at target is exist(minus index)
|
303
|
-
# child1 = [1, 2, 3, 4]
|
304
|
-
# child2 = [2, 3, 4, 5]
|
305
|
-
# lists = [child1, child2]
|
306
|
-
# ret = lists.together_delete_at -3
|
307
|
-
# print ret # => [2, 3]
|
308
|
-
# print lists # => output [[1, 3, 4], [2, 4, 5]]
|
309
|
-
def together_delete_at(index)
|
310
|
-
if_not_contain_array_rails_type_error
|
311
|
-
reduce([]) { |ret, list|ret << list.delete_at(index) }
|
312
|
-
end
|
313
|
-
|
314
|
-
# Arrays bulk delete_if.
|
315
|
-
#
|
316
|
-
# together_delete_if has alias :tdelete_if
|
317
|
-
#
|
318
|
-
# if delete_if target is exist. return self.
|
319
|
-
# lists = [[1, 2, 3, 4], [6, 4, 6, 8]]
|
320
|
-
# ret = lists.together_delete_if {|first, second|(first + second).odd?}
|
321
|
-
# print ret # => [[2, 4], [4, 8]]
|
322
|
-
#
|
323
|
-
# if delete_if target is not exist. return nil.
|
324
|
-
# lists = [[2, 2, 4, 4], [6, 4, 6, 8]]
|
325
|
-
# ret = lists.together_delete_if {|first, second|(first + second).odd?}
|
326
|
-
# print ret # => nil
|
327
|
-
def together_delete_if(&block)
|
328
|
-
if_not_contain_array_rails_type_error
|
329
|
-
have_deleted = false
|
330
|
-
first.each_with_index do |i_v, i|
|
331
|
-
eval_each_str = get_args_str_for_together i
|
332
|
-
is_delete = instance_eval "yield(#{eval_each_str})"
|
333
|
-
if is_delete
|
334
|
-
each { |e|e.delete_at i }
|
335
|
-
have_deleted = true
|
336
|
-
end
|
337
|
-
end
|
338
|
-
have_deleted ? self : nil
|
339
|
-
end
|
340
|
-
|
341
|
-
# Arrays bulk empty?.
|
342
|
-
#
|
343
|
-
# together_empty? has alias :tempty?
|
344
|
-
#
|
345
|
-
# empty case
|
346
|
-
# lists = [[], []]
|
347
|
-
# ret = lists.together_empty?
|
348
|
-
# print ret # => true
|
349
|
-
#
|
350
|
-
# not empty case
|
351
|
-
# lists = [[1], []]
|
352
|
-
# ret = lists.together_empty?
|
353
|
-
# print ret # => false
|
354
|
-
def together_empty?
|
355
|
-
if_not_contain_array_rails_type_error
|
356
|
-
is_empty = true
|
357
|
-
each { |list|is_empty = is_empty && list.empty? }
|
358
|
-
is_empty
|
359
|
-
end
|
360
|
-
|
361
|
-
# Arrays bulk fill.
|
362
|
-
#
|
363
|
-
# together_fill has alias :tfill
|
364
|
-
#
|
365
|
-
# not use block case
|
366
|
-
# lists = [[*1..5], [*6..10]]
|
367
|
-
# ret = lists.together_fill(99)
|
368
|
-
# print ret # => [[99, 99, 99, 99, 99], [99, 99, 99, 99, 99]]
|
369
|
-
#
|
370
|
-
# use block, no args case
|
371
|
-
# lists = [[*1..5], [*6..10]]
|
372
|
-
# ret = lists.together_fill { |i|(i + 1) + 1 }
|
373
|
-
# print ret # => [[2, 3, 4, 5, 6], [2, 3, 4, 5, 6]]
|
374
|
-
#
|
375
|
-
# use block, has args case
|
376
|
-
# lists = [[*1..5], [*6..10]]
|
377
|
-
# ret = lists.together_fill(2) { |i|(i + 1) + 1 }
|
378
|
-
# print ret # => [[1, 2, 4, 5, 6], [6, 7, 4, 5, 6]]
|
379
|
-
def together_fill(fill_value = nil, &block)
|
380
|
-
if_not_contain_array_rails_type_error
|
381
|
-
if block
|
382
|
-
fill_value = 0 if fill_value.nil?
|
383
|
-
first.each_with_index do |i_v, i|
|
384
|
-
next if i < fill_value
|
385
|
-
each { |list|list[i] = yield(i) }
|
386
|
-
end
|
387
|
-
else
|
388
|
-
each { |list|list.fill fill_value }
|
389
|
-
end
|
390
|
-
self
|
391
|
-
end
|
392
|
-
|
393
|
-
# Arrays bulk first.
|
394
|
-
#
|
395
|
-
# together_first has alias :tfirst
|
396
|
-
#
|
397
|
-
# no args case
|
398
|
-
# lists = [[*1..5], [*6..10]]
|
399
|
-
# ret = lists.together_first
|
400
|
-
# print ret # => [1, 6]
|
401
|
-
#
|
402
|
-
# has args 2 case
|
403
|
-
# lists = [[*1..5], [*6..10]]
|
404
|
-
# ret = lists.together_first 2
|
405
|
-
# print ret # => [[1, 2], [6, 7]]
|
406
|
-
#
|
407
|
-
# has args 0 case
|
408
|
-
# lists = [[*1..5], [*6..10]]
|
409
|
-
# ret = lists.together_first 0
|
410
|
-
# print ret # => [[], []]
|
411
|
-
#
|
412
|
-
# has args over size case
|
413
|
-
# lists = [[*1..5], [*6..10]]
|
414
|
-
# ret = lists.together_first 6
|
415
|
-
# print ret # => [[*1..5], [*6..10]]
|
416
|
-
def together_first(index = nil)
|
417
|
-
if_not_contain_array_rails_type_error
|
418
|
-
each_return = index == 0 ? '[]' : index.nil? ? 'list.first' : 'list[0..index - 1]'
|
419
|
-
reduce([]) { |ret, list|ret << eval(each_return, binding) }
|
420
|
-
end
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
ret
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'open_classes/object'
|
3
|
+
require 'open_classes/module'
|
4
|
+
|
5
|
+
# Array
|
6
|
+
class Array
|
7
|
+
# Arrays loop together.
|
8
|
+
#
|
9
|
+
# alpha = %w{one two three}
|
10
|
+
# numbers = %w{1 2 3}
|
11
|
+
# [alpha, numbers].together do |first, second|
|
12
|
+
# print "#{first}:#{second}\n" # => output one:1, two:2, three:3
|
13
|
+
# end
|
14
|
+
def together
|
15
|
+
if_not_contain_array_rails_type_error
|
16
|
+
first.each_with_index do |i_v, i|
|
17
|
+
eval_each_str = get_args_str_for_together i
|
18
|
+
instance_eval "yield(#{eval_each_str})"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Arrays loop together with index.
|
23
|
+
#
|
24
|
+
# alpha = %w{one two three}
|
25
|
+
# numbers = %w{1 2 3}
|
26
|
+
# [alpha, numbers].together_with_index do |first, second, index|
|
27
|
+
# print "#{index.to_s}:#{first}:#{second}\n" # => output 0:one:1, 1:two:2, 2:three:3
|
28
|
+
# end
|
29
|
+
def together_with_index
|
30
|
+
if_not_contain_array_rails_type_error
|
31
|
+
first.each_with_index do |i_v, i|
|
32
|
+
eval_each_str = get_args_str_for_together i, true
|
33
|
+
instance_eval "yield(#{eval_each_str})"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Arrays together map.
|
38
|
+
#
|
39
|
+
# together_map has aliases [:tmap, :together_collect, :tcollect]
|
40
|
+
#
|
41
|
+
# if you want to single Array return
|
42
|
+
# alpha = %w{one two three}
|
43
|
+
# numbers = %w{1 2 3}
|
44
|
+
# print [alpha, numbers].together_map do |first, second|
|
45
|
+
# "#{first}:#{second}\n"
|
46
|
+
# end # => output one:1, two:2, three:3
|
47
|
+
#
|
48
|
+
# if you want to multi Array return
|
49
|
+
# alpha = %w{one two three}
|
50
|
+
# numbers = %w{1 2 3}
|
51
|
+
# print [alpha, numbers].together_map do |first, second|
|
52
|
+
# ["#{first}:#{second}", "#{second}:#{first}"]
|
53
|
+
# end # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
54
|
+
def together_map
|
55
|
+
if_not_contain_array_rails_type_error
|
56
|
+
ret = []
|
57
|
+
first.each_with_index do |i_v, i|
|
58
|
+
eval_each_str = get_args_str_for_together i
|
59
|
+
each_ret = instance_eval "yield(#{eval_each_str})"
|
60
|
+
ret = set_together_each_return_map(ret, each_ret, i)
|
61
|
+
end
|
62
|
+
ret
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
# Arrays together map!.
|
67
|
+
#
|
68
|
+
# together_map! has aliases [:tmap!, :together_collect!, :tcollect!]
|
69
|
+
#
|
70
|
+
# if you want to single Array return
|
71
|
+
# alpha = %w{one two three}
|
72
|
+
# numbers = %w{1 2 3}
|
73
|
+
# ary = [alpha, numbers]
|
74
|
+
# ret = ary.together_map! do |first, second|
|
75
|
+
# "#{first}:#{second}"
|
76
|
+
# end
|
77
|
+
# print ret # => output ['one:1', 'two:2', 'three:3']
|
78
|
+
# print ary # => output ['one:1', 'two:2', 'three:3']
|
79
|
+
#
|
80
|
+
# if you want to multi Array return
|
81
|
+
# alpha = %w{one two three}
|
82
|
+
# numbers = %w{1 2 3}
|
83
|
+
# ary = [alpha, numbers]
|
84
|
+
# ret = ary.together_map! do |first, second|
|
85
|
+
# ["#{first}:#{second}", "#{second}:#{first}"]
|
86
|
+
# end
|
87
|
+
# print ret # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
88
|
+
# print ary # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
89
|
+
def together_map!
|
90
|
+
if_not_contain_array_rails_type_error
|
91
|
+
ret = []
|
92
|
+
first.each_with_index do |i_v, i|
|
93
|
+
eval_each_str = get_args_str_for_together i
|
94
|
+
each_ret = instance_eval "yield(#{eval_each_str})"
|
95
|
+
ret = set_together_each_return_map(ret, each_ret, i)
|
96
|
+
end
|
97
|
+
clear
|
98
|
+
ret.each { |v|self << v }
|
99
|
+
end
|
100
|
+
|
101
|
+
# Arrays loop together select.
|
102
|
+
#
|
103
|
+
# together_select has aliases [:tselect, :together_find_all, :tfindall]
|
104
|
+
#
|
105
|
+
# if you want to single Array return
|
106
|
+
# firsts = [1, 2, 3, 4]
|
107
|
+
# seconds = [4, 2, 3, 1]
|
108
|
+
# ret = [firsts, seconds].together_select{|first, second|first == second}
|
109
|
+
# print ret # => output [[2, 3], [2, 3]]
|
110
|
+
#
|
111
|
+
# if you want to multi Array return
|
112
|
+
# firsts = [1, 2, 3, 4]
|
113
|
+
# seconds = [4, 2, 3, 1]
|
114
|
+
# ret = [firsts, seconds].together_select{|first, second|[first.odd?, second.even?]}
|
115
|
+
# print ret # => output [[1, 3], [4, 2]]
|
116
|
+
def together_select
|
117
|
+
if_not_contain_array_rails_type_error
|
118
|
+
ret = []
|
119
|
+
first.each_with_index do |i_v, i|
|
120
|
+
eval_each_str = get_args_str_for_together i
|
121
|
+
each_ret = instance_eval "yield(#{eval_each_str})"
|
122
|
+
ret = set_together_each_return_select(ret, each_ret, i)
|
123
|
+
end
|
124
|
+
ret
|
125
|
+
end
|
126
|
+
|
127
|
+
# Arrays loop together reduce.
|
128
|
+
#
|
129
|
+
# together_reduce has aliases [:treduce, :together_inject, :tinject]
|
130
|
+
#
|
131
|
+
# if you want to single return
|
132
|
+
# firsts = [1, 2, 3, 4]
|
133
|
+
# seconds = [4, 2, 3, 1]
|
134
|
+
# ret = [firsts, seconds].together_reduce{|memo, first, second|memo + first + second}
|
135
|
+
# print ret # => output 20
|
136
|
+
#
|
137
|
+
# if you want to single return with init value
|
138
|
+
# firsts = [1, 2, 3, 4]
|
139
|
+
# seconds = [4, 2, 3, 1]
|
140
|
+
# ret = [firsts, seconds].together_reduce(10){|memo, first, second|memo + first + second}
|
141
|
+
# print ret # => output 30
|
142
|
+
#
|
143
|
+
# if you want to single return with init string value
|
144
|
+
# firsts = %w{a b c}
|
145
|
+
# seconds = %w{1 2 3}
|
146
|
+
# ret = [firsts, seconds].together_reduce('start-'){|memo, first, second|memo + first + second}
|
147
|
+
# print ret # => output 'start-a1b2c3'
|
148
|
+
#
|
149
|
+
# if you want to single return with init Array value
|
150
|
+
# firsts = [1, 2, 3, 4]
|
151
|
+
# seconds = [4, 2, 3, 1]
|
152
|
+
# ret = [firsts, seconds].together_reduce([]){|memo, first, second|memo << first + second}
|
153
|
+
# print ret # => output [5, 4, 6, 5]
|
154
|
+
#
|
155
|
+
# if you want to single return with init Hash value
|
156
|
+
# firsts = [1, 2, 3, 4]
|
157
|
+
# seconds = [4, 2, 3, 1]
|
158
|
+
# ret = [firsts, seconds].together_reduce({}){|memo, first, second|memo[first] = second;memo}
|
159
|
+
# print ret # => output {1=>4, 2=>2, 3=>3, 4=>1}
|
160
|
+
def together_reduce(init = nil)
|
161
|
+
if_not_contain_array_rails_type_error
|
162
|
+
memo = initial_memo init
|
163
|
+
first.each_with_index do |i_v, i|
|
164
|
+
eval_each_str = get_args_str_for_together i
|
165
|
+
memo = instance_eval "yield(memo, #{eval_each_str})"
|
166
|
+
end
|
167
|
+
memo
|
168
|
+
end
|
169
|
+
|
170
|
+
# Arrays bulk concat.
|
171
|
+
#
|
172
|
+
# together_concat has alias :tconcat
|
173
|
+
#
|
174
|
+
# alpha = %w{one two three}
|
175
|
+
# numbers = %w{1 2 3}
|
176
|
+
# [alpha, numbers].together do |first, second|
|
177
|
+
# print "#{first}:#{second}\n" # => output one:1, two:2, three:3
|
178
|
+
# end
|
179
|
+
def together_concat(other)
|
180
|
+
if_not_contain_array_rails_type_error
|
181
|
+
each { |list|list.concat other }
|
182
|
+
end
|
183
|
+
|
184
|
+
# Arrays bulk at.
|
185
|
+
#
|
186
|
+
# together_at has alias :tat
|
187
|
+
#
|
188
|
+
# same elements size case
|
189
|
+
# alpha = %w{one two three}
|
190
|
+
# numbers = %w{1 2 3}
|
191
|
+
# [alpha, numbers].together_at 2 # => output ['three', 3]
|
192
|
+
#
|
193
|
+
# different elements size case
|
194
|
+
# alpha = %w{one two three}
|
195
|
+
# numbers = %w{1 2}
|
196
|
+
# [alpha, numbers].together_at 2 # => output ['three', nil]
|
197
|
+
def together_at(index)
|
198
|
+
if_not_contain_array_rails_type_error
|
199
|
+
reduce([]) { |ats, list|ats << list.at(index) }
|
200
|
+
end
|
201
|
+
|
202
|
+
# Arrays bulk clear.
|
203
|
+
#
|
204
|
+
# together_clear has alias :tclear
|
205
|
+
#
|
206
|
+
# same elements size case
|
207
|
+
# alpha = %w{one two three}
|
208
|
+
# numbers = %w{1 2 3}
|
209
|
+
# [alpha, numbers].together_clear # => output [[],[]]
|
210
|
+
def together_clear
|
211
|
+
if_not_contain_array_rails_type_error
|
212
|
+
each { |list|list.clear }
|
213
|
+
end
|
214
|
+
|
215
|
+
# Arrays bulk compact.(immutable)
|
216
|
+
#
|
217
|
+
# together_compact has alias :tcompact
|
218
|
+
#
|
219
|
+
# same elements size case
|
220
|
+
# alpha = ['a','b','c', nil,'d']
|
221
|
+
# numbers = [1, 2, nil, 3]
|
222
|
+
# lists = [alpha, numbers]
|
223
|
+
# ret = lists.together_compact
|
224
|
+
# print lists # => output [['a','b','c', nil,'d'], [1, 2, nil, 3]]
|
225
|
+
# print ret # => output [['a','b','c','d'], [1, 2, 3]]
|
226
|
+
def together_compact
|
227
|
+
if_not_contain_array_rails_type_error
|
228
|
+
reduce([]) { |ret, list|ret << list.compact }
|
229
|
+
end
|
230
|
+
|
231
|
+
# Arrays bulk compact!.(mutable)
|
232
|
+
#
|
233
|
+
# together_compact! has alias :tcompact!
|
234
|
+
#
|
235
|
+
# same elements size case
|
236
|
+
# alpha = ['a','b','c', nil,'d']
|
237
|
+
# numbers = [1, 2, nil, 3]
|
238
|
+
# lists = [alpha, numbers]
|
239
|
+
# ret = lists.together_compact!
|
240
|
+
# print lists # => output [['a','b','c','d'], [1, 2, 3]]
|
241
|
+
# print ret # => output [['a','b','c','d'], [1, 2, 3]]
|
242
|
+
def together_compact!
|
243
|
+
if_not_contain_array_rails_type_error
|
244
|
+
each { |list|list.compact! }
|
245
|
+
end
|
246
|
+
|
247
|
+
# Arrays bulk delete.
|
248
|
+
#
|
249
|
+
# together_delete has alias :tdelete
|
250
|
+
#
|
251
|
+
# if delete target is exist
|
252
|
+
# child1 = [1, 2, 3, 4]
|
253
|
+
# child2 = [2, 3, 4, 5]
|
254
|
+
# lists = [child1, child2]
|
255
|
+
# ret = lists.together_delete 2
|
256
|
+
# print ret # => 2
|
257
|
+
# print lists # => output [[1, 3, 4], [3, 4, 5]]
|
258
|
+
#
|
259
|
+
# if delete target is not exist
|
260
|
+
# child1 = [1, 2, 3, 4]
|
261
|
+
# child2 = [2, 3, 4, 5]
|
262
|
+
# lists = [child1, child2]
|
263
|
+
# ret = lists.together_delete 6
|
264
|
+
# print ret # => nil
|
265
|
+
# print lists # => output [[1, 2, 3, 4], [2, 3, 4, 5]]
|
266
|
+
#
|
267
|
+
# if delete target is not exist and use block
|
268
|
+
# child1 = [1, 2, 3, 4]
|
269
|
+
# child2 = [2, 3, 4, 5]
|
270
|
+
# lists = [child1, child2]
|
271
|
+
# ret = lists.together_delete(6) { 999 }
|
272
|
+
# print ret # => 999
|
273
|
+
# print lists # => output [[1, 2, 3, 4], [2, 3, 4, 5]]
|
274
|
+
def together_delete(value)
|
275
|
+
if_not_contain_array_rails_type_error
|
276
|
+
ret = []
|
277
|
+
each { |list|ret << list.delete(value) }
|
278
|
+
default_return = block_given? ? yield : nil
|
279
|
+
ret.compact.size == 0 ? default_return : value
|
280
|
+
end
|
281
|
+
|
282
|
+
# Arrays bulk delete_at.
|
283
|
+
#
|
284
|
+
# together_delete_at has alias :tdelete_at
|
285
|
+
#
|
286
|
+
# if delete_at target is exist
|
287
|
+
# child1 = [1, 2, 3, 4]
|
288
|
+
# child2 = [2, 3, 4, 5]
|
289
|
+
# lists = [child1, child2]
|
290
|
+
# ret = lists.together_delete_at 2
|
291
|
+
# print ret # => [3, 4]
|
292
|
+
# print lists # => output [[1, 2, 4], [2, 3, 5]]
|
293
|
+
#
|
294
|
+
# if delete_at target is not exist
|
295
|
+
# child1 = [1, 2, 3, 4]
|
296
|
+
# child2 = [2, 3, 4, 5]
|
297
|
+
# lists = [child1, child2]
|
298
|
+
# ret = lists.together_delete_at 6
|
299
|
+
# print ret # => [nil, nil]
|
300
|
+
# print lists # => output [[1, 2, 3, 4], [2, 3, 4, 5]]
|
301
|
+
#
|
302
|
+
# if delete_at target is exist(minus index)
|
303
|
+
# child1 = [1, 2, 3, 4]
|
304
|
+
# child2 = [2, 3, 4, 5]
|
305
|
+
# lists = [child1, child2]
|
306
|
+
# ret = lists.together_delete_at -3
|
307
|
+
# print ret # => [2, 3]
|
308
|
+
# print lists # => output [[1, 3, 4], [2, 4, 5]]
|
309
|
+
def together_delete_at(index)
|
310
|
+
if_not_contain_array_rails_type_error
|
311
|
+
reduce([]) { |ret, list|ret << list.delete_at(index) }
|
312
|
+
end
|
313
|
+
|
314
|
+
# Arrays bulk delete_if.
|
315
|
+
#
|
316
|
+
# together_delete_if has alias :tdelete_if
|
317
|
+
#
|
318
|
+
# if delete_if target is exist. return self.
|
319
|
+
# lists = [[1, 2, 3, 4], [6, 4, 6, 8]]
|
320
|
+
# ret = lists.together_delete_if {|first, second|(first + second).odd?}
|
321
|
+
# print ret # => [[2, 4], [4, 8]]
|
322
|
+
#
|
323
|
+
# if delete_if target is not exist. return nil.
|
324
|
+
# lists = [[2, 2, 4, 4], [6, 4, 6, 8]]
|
325
|
+
# ret = lists.together_delete_if {|first, second|(first + second).odd?}
|
326
|
+
# print ret # => nil
|
327
|
+
def together_delete_if(&block)
|
328
|
+
if_not_contain_array_rails_type_error
|
329
|
+
have_deleted = false
|
330
|
+
first.each_with_index do |i_v, i|
|
331
|
+
eval_each_str = get_args_str_for_together i
|
332
|
+
is_delete = instance_eval "yield(#{eval_each_str})"
|
333
|
+
if is_delete
|
334
|
+
each { |e|e.delete_at i }
|
335
|
+
have_deleted = true
|
336
|
+
end
|
337
|
+
end
|
338
|
+
have_deleted ? self : nil
|
339
|
+
end
|
340
|
+
|
341
|
+
# Arrays bulk empty?.
|
342
|
+
#
|
343
|
+
# together_empty? has alias :tempty?
|
344
|
+
#
|
345
|
+
# empty case
|
346
|
+
# lists = [[], []]
|
347
|
+
# ret = lists.together_empty?
|
348
|
+
# print ret # => true
|
349
|
+
#
|
350
|
+
# not empty case
|
351
|
+
# lists = [[1], []]
|
352
|
+
# ret = lists.together_empty?
|
353
|
+
# print ret # => false
|
354
|
+
def together_empty?
|
355
|
+
if_not_contain_array_rails_type_error
|
356
|
+
is_empty = true
|
357
|
+
each { |list|is_empty = is_empty && list.empty? }
|
358
|
+
is_empty
|
359
|
+
end
|
360
|
+
|
361
|
+
# Arrays bulk fill.
|
362
|
+
#
|
363
|
+
# together_fill has alias :tfill
|
364
|
+
#
|
365
|
+
# not use block case
|
366
|
+
# lists = [[*1..5], [*6..10]]
|
367
|
+
# ret = lists.together_fill(99)
|
368
|
+
# print ret # => [[99, 99, 99, 99, 99], [99, 99, 99, 99, 99]]
|
369
|
+
#
|
370
|
+
# use block, no args case
|
371
|
+
# lists = [[*1..5], [*6..10]]
|
372
|
+
# ret = lists.together_fill { |i|(i + 1) + 1 }
|
373
|
+
# print ret # => [[2, 3, 4, 5, 6], [2, 3, 4, 5, 6]]
|
374
|
+
#
|
375
|
+
# use block, has args case
|
376
|
+
# lists = [[*1..5], [*6..10]]
|
377
|
+
# ret = lists.together_fill(2) { |i|(i + 1) + 1 }
|
378
|
+
# print ret # => [[1, 2, 4, 5, 6], [6, 7, 4, 5, 6]]
|
379
|
+
def together_fill(fill_value = nil, &block)
|
380
|
+
if_not_contain_array_rails_type_error
|
381
|
+
if block
|
382
|
+
fill_value = 0 if fill_value.nil?
|
383
|
+
first.each_with_index do |i_v, i|
|
384
|
+
next if i < fill_value
|
385
|
+
each { |list|list[i] = yield(i) }
|
386
|
+
end
|
387
|
+
else
|
388
|
+
each { |list|list.fill fill_value }
|
389
|
+
end
|
390
|
+
self
|
391
|
+
end
|
392
|
+
|
393
|
+
# Arrays bulk first.
|
394
|
+
#
|
395
|
+
# together_first has alias :tfirst
|
396
|
+
#
|
397
|
+
# no args case
|
398
|
+
# lists = [[*1..5], [*6..10]]
|
399
|
+
# ret = lists.together_first
|
400
|
+
# print ret # => [1, 6]
|
401
|
+
#
|
402
|
+
# has args 2 case
|
403
|
+
# lists = [[*1..5], [*6..10]]
|
404
|
+
# ret = lists.together_first 2
|
405
|
+
# print ret # => [[1, 2], [6, 7]]
|
406
|
+
#
|
407
|
+
# has args 0 case
|
408
|
+
# lists = [[*1..5], [*6..10]]
|
409
|
+
# ret = lists.together_first 0
|
410
|
+
# print ret # => [[], []]
|
411
|
+
#
|
412
|
+
# has args over size case
|
413
|
+
# lists = [[*1..5], [*6..10]]
|
414
|
+
# ret = lists.together_first 6
|
415
|
+
# print ret # => [[*1..5], [*6..10]]
|
416
|
+
def together_first(index = nil)
|
417
|
+
if_not_contain_array_rails_type_error
|
418
|
+
each_return = index == 0 ? '[]' : index.nil? ? 'list.first' : 'list[0..index - 1]'
|
419
|
+
reduce([]) { |ret, list|ret << eval(each_return, binding) }
|
420
|
+
end
|
421
|
+
|
422
|
+
# Arrays bulk include?.
|
423
|
+
#
|
424
|
+
# together_include? has alias :tinclude?
|
425
|
+
#
|
426
|
+
# both include single ret case
|
427
|
+
# lists = [[*1..5], [*5..9]]
|
428
|
+
# ret = lists.together_include? 5
|
429
|
+
# print ret # => true
|
430
|
+
#
|
431
|
+
# one include single ret case
|
432
|
+
# lists = [[*1..5], [*5..9]]
|
433
|
+
# ret = lists.together_include? 9
|
434
|
+
# print ret # => true
|
435
|
+
#
|
436
|
+
# both not include single ret case
|
437
|
+
# lists = [[*1..5], [*5..9]]
|
438
|
+
# ret = lists.together_include? 10
|
439
|
+
# print ret # => false
|
440
|
+
#
|
441
|
+
# both include multi ret case
|
442
|
+
# lists = [[*1..5], [*5..9]]
|
443
|
+
# ret = lists.together_include? 5, true
|
444
|
+
# print ret # => [true, true]
|
445
|
+
#
|
446
|
+
# one include multi ret case
|
447
|
+
# lists = [[*1..5], [*5..9]]
|
448
|
+
# ret = lists.together_include? 9, true
|
449
|
+
# print ret # => [false, true]
|
450
|
+
#
|
451
|
+
# both not include multi ret case
|
452
|
+
# lists = [[*1..5], [*5..9]]
|
453
|
+
# ret = lists.together_include? 10, true
|
454
|
+
# print ret # => [false, false]
|
455
|
+
def together_include?(value, is_multi = false)
|
456
|
+
if_not_contain_array_rails_type_error
|
457
|
+
return reduce([]) { |ret, list|ret << list.include?(value) } if is_multi
|
458
|
+
reduce(false) { |ret, list|ret = ret || list.include?(value) }
|
459
|
+
end
|
460
|
+
|
461
|
+
private
|
462
|
+
|
463
|
+
def if_not_contain_array_rails_type_error
|
464
|
+
each { |f|fail TypeError, "you have to use [Array1, Array2, ...] | #{f.class} is invalid" unless f.class == Array }
|
465
|
+
end
|
466
|
+
|
467
|
+
def get_args_for_together(i)
|
468
|
+
eval_each = []
|
469
|
+
each_with_index { |j_v, j|eval_each << "self[#{j}][#{i}]" }
|
470
|
+
eval_each
|
471
|
+
end
|
472
|
+
|
473
|
+
def get_args_str_for_together(i, with_index = false)
|
474
|
+
each_eval = with_index ? get_args_for_together(i) << i : get_args_for_together(i)
|
475
|
+
each_eval.join(',')
|
476
|
+
end
|
477
|
+
|
478
|
+
def set_together_each_return_map(ret, each_ret, index)
|
479
|
+
if together_return_multi?(each_ret)
|
480
|
+
size.times { |i|ret << [] } if index == 0
|
481
|
+
(0..(size - 1)).each { |i|ret[i] << each_ret[i] }
|
482
|
+
else
|
483
|
+
ret << each_ret
|
484
|
+
end
|
485
|
+
ret
|
486
|
+
end
|
487
|
+
|
488
|
+
def set_together_each_return_select(ret, each_ret, index)
|
489
|
+
unless together_return_multi?(each_ret)
|
490
|
+
tmp_each_ret = []
|
491
|
+
size.times { tmp_each_ret << each_ret }
|
492
|
+
each_ret = tmp_each_ret
|
493
|
+
end
|
494
|
+
size.times { |i|ret << [] } if index == 0
|
495
|
+
(0..(size - 1)).each { |i|ret[i] << self[i][index] if each_ret[i] }
|
496
|
+
ret
|
497
|
+
end
|
498
|
+
|
499
|
+
def initial_memo(init)
|
500
|
+
return init unless init.nil?
|
501
|
+
first.first.is_a?(Numeric) ? 0 : first.first.is_a?(String) ? '' : nil
|
502
|
+
end
|
503
|
+
|
504
|
+
def together_return_multi?(list)
|
505
|
+
(list.class == Array && list.size == size).to_bool
|
506
|
+
end
|
507
|
+
|
508
|
+
alias_method :tconcat, :together_concat
|
509
|
+
alias_method :tat, :together_at
|
510
|
+
alias_method :tclear, :together_clear
|
511
|
+
alias_method :tcompact, :together_compact
|
512
|
+
alias_method :tcompact!, :together_compact!
|
513
|
+
alias_method :tdelete, :together_delete
|
514
|
+
alias_method :tdelete_at, :together_delete_at
|
515
|
+
alias_method :tdelete_if, :together_delete_if
|
516
|
+
alias_method :tempty?, :together_empty?
|
517
|
+
alias_method :tfill, :together_fill
|
518
|
+
alias_method :tfirst, :together_first
|
519
|
+
alias_method :tinclude?, :together_include?
|
520
|
+
alias_methods [:together_collect, :tmap, :tcollect], :together_map
|
521
|
+
alias_methods [:together_collect!, :tmap!, :tcollect!], :together_map!
|
522
|
+
alias_methods [:together_find_all, :tselect, :tfindall], :together_select
|
523
|
+
alias_methods [:together_inject, :treduce, :tinject], :together_reduce
|
524
|
+
end
|
data/lib/tbpgr_utils/version.rb
CHANGED
@@ -1006,7 +1006,6 @@ describe Array do
|
|
1006
1006
|
end
|
1007
1007
|
end
|
1008
1008
|
|
1009
|
-
|
1010
1009
|
context :together_first do
|
1011
1010
|
cases = [
|
1012
1011
|
{
|
@@ -1085,4 +1084,99 @@ describe Array do
|
|
1085
1084
|
end
|
1086
1085
|
end
|
1087
1086
|
end
|
1087
|
+
|
1088
|
+
context :together_include? do
|
1089
|
+
cases = [
|
1090
|
+
{
|
1091
|
+
case_no: 1,
|
1092
|
+
case_title: 'both include single ret case',
|
1093
|
+
inputs: [[*1..5], [*5..9]],
|
1094
|
+
value: 5,
|
1095
|
+
method_name: :together_include?,
|
1096
|
+
expected: true,
|
1097
|
+
is_multi: false,
|
1098
|
+
},
|
1099
|
+
{
|
1100
|
+
case_no: 2,
|
1101
|
+
case_title: 'one include single ret case',
|
1102
|
+
inputs: [[*1..5], [*5..9]],
|
1103
|
+
value: 9,
|
1104
|
+
method_name: :together_include?,
|
1105
|
+
expected: true,
|
1106
|
+
is_multi: false,
|
1107
|
+
},
|
1108
|
+
{
|
1109
|
+
case_no: 3,
|
1110
|
+
case_title: 'both not include single ret case',
|
1111
|
+
inputs: [[*1..5], [*5..9]],
|
1112
|
+
value: 10,
|
1113
|
+
method_name: :together_include?,
|
1114
|
+
expected: false,
|
1115
|
+
is_multi: false,
|
1116
|
+
},
|
1117
|
+
{
|
1118
|
+
case_no: 4,
|
1119
|
+
case_title: 'both include multi ret case',
|
1120
|
+
inputs: [[*1..5], [*5..9]],
|
1121
|
+
value: 5,
|
1122
|
+
method_name: :together_include?,
|
1123
|
+
expected: [true, true],
|
1124
|
+
is_multi: true,
|
1125
|
+
},
|
1126
|
+
{
|
1127
|
+
case_no: 5,
|
1128
|
+
case_title: 'one include multi ret case',
|
1129
|
+
inputs: [[*1..5], [*5..9]],
|
1130
|
+
value: 9,
|
1131
|
+
method_name: :together_include?,
|
1132
|
+
expected: [false, true],
|
1133
|
+
is_multi: true,
|
1134
|
+
},
|
1135
|
+
{
|
1136
|
+
case_no: 6,
|
1137
|
+
case_title: 'both not include multi ret case',
|
1138
|
+
inputs: [[*1..5], [*5..9]],
|
1139
|
+
value: 10,
|
1140
|
+
method_name: :together_include?,
|
1141
|
+
expected: [false, false],
|
1142
|
+
is_multi: true,
|
1143
|
+
},
|
1144
|
+
{
|
1145
|
+
case_no: 7,
|
1146
|
+
case_title: 'both include single ret case(alias tinclude?)',
|
1147
|
+
inputs: [[*1..5], [*5..9]],
|
1148
|
+
value: 5,
|
1149
|
+
method_name: :tinclude?,
|
1150
|
+
expected: true,
|
1151
|
+
is_multi: false,
|
1152
|
+
},
|
1153
|
+
]
|
1154
|
+
|
1155
|
+
cases.each do |c|
|
1156
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
1157
|
+
begin
|
1158
|
+
case_before c
|
1159
|
+
|
1160
|
+
# -- given --
|
1161
|
+
# nothing
|
1162
|
+
|
1163
|
+
# -- when --
|
1164
|
+
actual = c[:inputs].send c[:method_name], c[:value], c[:is_multi]
|
1165
|
+
|
1166
|
+
# -- then --
|
1167
|
+
expect(actual).to eq(c[:expected])
|
1168
|
+
ensure
|
1169
|
+
case_after c
|
1170
|
+
end
|
1171
|
+
end
|
1172
|
+
|
1173
|
+
def case_before(c)
|
1174
|
+
# implement each case before
|
1175
|
+
end
|
1176
|
+
|
1177
|
+
def case_after(c)
|
1178
|
+
# implement each case after
|
1179
|
+
end
|
1180
|
+
end
|
1181
|
+
end
|
1088
1182
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tbpgr_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.30
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &27941640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 4.0.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *27941640
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &27941196 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.3'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *27941196
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &27940872 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *27940872
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &29420712 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.14.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *29420712
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simplecov
|
60
|
-
requirement: &
|
60
|
+
requirement: &29420412 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 0.8.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *29420412
|
69
69
|
description: Utilities
|
70
70
|
email:
|
71
71
|
- tbpgr@tbpgr.jp
|