forked from rurema/doctree
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Array
2879 lines (2166 loc) · 94.6 KB
/
Array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
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
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
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
= class Array < Object
include Enumerable
配列クラスです。
配列は任意の Ruby オブジェクトを要素として持つことができます。
一般的には配列は配列式を使って
#@samplecode 例
[1, 2, 3]
#@end
のように生成します。
== Class Methods
#@since 1.9.1
--- try_convert(obj) -> Array | nil
to_ary メソッドを用いて obj を配列に変換しようとします。
何らかの理由で変換できないときには nil を返します。
このメソッドは引数が配列であるかどうかを調べるために使えます。
#@samplecode 例
Array.try_convert([1]) # => [1]
Array.try_convert("1") # => nil
if tmp = Array.try_convert(arg)
# the argument is an array
elsif tmp = String.try_convert(arg)
# the argument is a string
end
#@end
#@end
--- [](*item) -> Array
引数 item を要素として持つ配列を生成して返します。
[[c:Array]] のサブクラスを作成したしたときに、そのサブクラスのインスタンスを作成
しやすくするために用意されている。
@param item 配列の要素を指定します。
#@samplecode 例
Array[1, 2, 3] #=> [1, 2, 3]
class SubArray < Array
# ...
end
p SubArray[1, 2, 3] # => [1, 2, 3]
#@end
--- new(size = 0, val = nil) -> Array
長さ size の配列を生成し、各要素を val で初期化して返します。
要素毎に val が複製されるわけではないことに注意してください。
全要素が同じオブジェクト val を参照します。
後述の例では、配列の各要素は全て同一の文字列を指します。
@param size 配列の長さを数値で指定します。
@param val 配列の要素の値を指定します。
#@samplecode 例
ary = Array.new(3, "foo")
p ary #=> ["foo", "foo", "foo"]
ary[0].capitalize!
p ary #=> ["Foo", "Foo", "Foo"] (各要素は同一のオブジェクトである)
#@end
--- new(ary) -> Array
指定された配列 ary を複製して返します。
[[m:Array#dup]] 同様 要素を複製しない浅い複製です。
@param ary 複製したい配列を指定します。
#@samplecode 例
p Array.new([1,2,3]) # => [1,2,3]
a = ["a", "b", "c"]
b = Array.new(a)
a.each{|s| s.capitalize! }
p a #=> ["A", "B", "C"]
p b #=> ["A", "B", "C"] (b は a と要素を共有する)
#@end
--- new(size) {|index| ... } -> Array
長さ size の配列を生成し、各要素のインデックスを引数としてブロックを実行し、
各要素の値をブロックの評価結果に設定します。
ブロックは要素毎に実行されるので、全要素をあるオブジェクトの複製にすることができます。
@param size 配列の長さを数値で指定します。
#@samplecode 例
ary = Array.new(3){|index| "hoge#{index}"}
p ary #=> ["hoge0", "hoge1", "hoge2"]
#@end
#@samplecode 例
ary = Array.new(3){ "foo" }
p ary #=> ["foo", "foo", "foo"]
ary[0].capitalize!
p ary #=> ["Foo", "foo", "foo"] (各要素は違うオブジェクトである)
#@end
== Instance Methods
--- [](nth) -> object | nil
--- at(nth) -> object | nil
nth 番目の要素を返します。nth 番目の要素が存在しない時には nil を返します。
@param nth インデックスを整数で指定します。
先頭の要素が 0 番目になります。nth の値が負の時には末尾から
のインデックスと見倣します。末尾の要素が -1 番目になります。
整数以外のオブジェクトを指定した場合は to_int メソッドによる
暗黙の型変換を試みます。
@raise TypeError 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
a = [ "a", "b", "c", "d", "e" ]
a[0] #=> "a"
a[1] #=> "b"
a[-1] #=> "e"
a[-2] #=> "d"
a[10] #=> nil
#@end
--- [](range) -> Array | nil
[[c:Range]] オブジェクト range の範囲にある要素からなる部分配列を返します。
range の first の値が配列の範囲に収まらない場合 nil を返します。
range の first が end より後にある場合には空の配列を返します。
@param range 生成したい部分配列の範囲を [[c:Range]] オブジェクトで指定します。
range の first や end の値が負の時には末尾からのインデックスと見倣します。末尾
の要素が -1 番目になります。
end の値が配列の範囲を越える時には、越えた分は無視されます。
#@samplecode 例
a = [ "a", "b", "c", "d", "e" ]
a[0..1] #=> ["a", "b"]
a[0...1] #=> ["a"]
a[0..-1] #=> ["a", "b", "c", "d", "e"]
a[-2..-1] #=> ["d", "e"]
a[-2..4] #=> ["d", "e"] (start は末尾から -2 番目、end は先頭から (4+1) 番目となる。)
a[0..10] #=> ["a", "b", "c", "d", "e"]
a[10..11] #=> nil
a[2..1] #=> []
a[-1..-2] #=> []
# 特殊なケース。first が自身の長さと同じ場合には以下のようになります。
a[5] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
#@end
--- [](start, length) -> Array | nil
start 番目から length 個の要素を含む部分配列を返します。
length が負の時、start が自身の範囲を越えた時には nil を返します。
@param start 生成したい部分配列の先頭のインデックスを整数で指定します。
start の値が負の時には末尾からのインデックスと見倣します。
末尾の要素が -1 番目になります。
整数以外のオブジェクトを指定した場合は to_int メソッドによ
る暗黙の型変換を試みます。
@param length 生成したい部分配列の長さを整数で指定します。
length が start 番目からの配列の長さより長い時には、越え
た分の長さは無視されます。
整数以外のオブジェクトを指定した場合は to_int メソッドに
よる暗黙の型変換を試みます。
@raise TypeError 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
a = [ "a", "b", "c", "d", "e" ]
a[0, 1] #=> ["a"]
a[-1, 1] #=> ["e"]
a[0, 10] #=> ["a", "b", "c", "d", "e"]
a[0, 0] #=> []
a[0, -1] #=> nil
a[10, 1] #=> nil
# 特殊なケース。start が自身の長さと同じ場合には以下のようになります。
a[5] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
#@end
--- []=(nth, val)
nth 番目の要素を val に設定します。nth が配列の範囲を越える時には配列の長さを自動的に拡張し、
拡張した領域を nil で初期化します。
@param nth インデックスを整数で指定します。
整数以外のオブジェクトを指定した場合は to_int メソッドによる
暗黙の型変換を試みます。
@param val 設定したい要素の値を指定します。
@raise TypeError 引数 nth に整数以外の(暗黙の型変換が行えない)オブジェ
クトを指定した場合に発生します。
@raise IndexError 指定された nth が自身の始点よりも前を指している場合に発生します。
#@samplecode 例
a = [0, 1, 2, 3, 4, 5]
a[0] = "a"
p a #=> ["a", 1, 2, 3, 4, 5]
a[10] = "x"
p a #=> ["a", 1, 2, 3, 4, 5, nil, nil, nil, nil, "x"]
a = [0, 1, 2, 3, 4, 5]
a[-100] = 1 #=> IndexError
#@end
--- []=(range, val)
[[c:Range]] オブジェクト range の範囲にある要素を配列 val の内容に置換します。
range の first が自身の末尾を越える時には配列の長さを自動的に拡張し、拡張した領域を nil で初期化します。
#@samplecode 例
ary = [0, 1, 2, 3, 4, 5]
ary[0..2] = ["a", "b"]
p ary # => ["a", "b", 3, 4, 5]
ary = [0, 1, 2]
ary[5..6] = "x"
p ary # => [0, 1, 2, nil, nil, "x"]
ary = [0, 1, 2, 3, 4, 5]
ary[1..3] = "x"
p ary # => [0, "x", 4, 5]
#@end
@param range 設定したい配列の範囲を [[c:Range]] オブジェクトで指定します。
range の first や end の値が負の時には末尾からのインデックスと見倣します。
末尾の要素が -1 番目になります。
range の first が end より後にある場合には first の直前に val を挿入します。
#@samplecode 例
ary = [0, 1, 2, 3, 4, 5]
ary[2..0] = ["a", "b", "c"]
p ary # => [0, 1, "a", "b", "c", 2, 3, 4, 5]
#@end
@param val range の範囲に設定したい要素を配列で指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによる
暗黙の型変換を試みます。to_ary メソッドに応答できない場合は
[val] を用います。
val の要素の数の方が range の長さより大きい時には、後ろの要素がずれます。
#@since 1.9.1
val が空の配列 [] なら start から end までの要素が削除されます。
#@else
val が nil か 空の配列 [] なら start から end までの要素が削除されます。
#@end
#@samplecode 例
ary = [0, 1, 2, 3, 4, 5]
ary[2..4] = []
p ary # => [0, 1, 5]
#@end
@raise RangeError 指定された範囲の始点が自身の始点よりも前にある場合に発生します。
#@samplecode 例
a = [0, 1, 2, 3, 4, 5]
a[-10..10] = 1 #=> RangeError
#@end
--- []=(start, length, val)
インデックス start から length 個の要素を配列 val の内容で置き換えます。
start が自身の末尾を越える時には配列の長さを自動的に拡張し、拡張した領域を nil で初期化します。
#@samplecode 例
ary = [0, 1, 2, 3]
ary[1, 2] = ["a", "b", "c", "d"]
p ary #=> [0, "a", "b", "c", "d", 3]
ary = [0, 1, 2]
ary[5, 1] = "Z"
p ary #=> [0, 1, 2, nil, nil, "Z"]
ary = [0, 1, 2, 3]
ary[0, 10] = ["a"]
p ary #=> ["a"]
#@end
@param start 置き換えたい範囲の先頭のインデックスを指定します。
start の値が負の時には末尾からのインデックスと見倣します。
末尾の要素が -1 番目になります。
整数以外のオブジェクトを指定した場合は to_int メソッドによ
る暗黙の型変換を試みます。
@param length 置き換えたい要素の個数を指定します。
length の値が 0 のときは start の直前に val を挿入します。
整数以外のオブジェクトを指定した場合は to_int メソッドに
よる暗黙の型変換を試みます。
#@samplecode 例
ary = [0, 1, 2, 3]
ary[1, 0] = ["inserted"]
p ary # => [0, "inserted", 1, 2, 3]
#@end
@param val 設定したい要素を配列で指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによる
暗黙の型変換を試みます。to_ary メソッドに応答できない場合は
[val] を用います。
val の長さが length と等しくない場合には、val の長さに合わせて要素が削除されたりずれたりします。
#@since 1.9.1
val が空の配列 [] なら start から end までの要素が削除されます。
#@else
val が nil か 空の配列 [] なら start から end までの要素が削除されます。
#@end
#@samplecode 例
a = [0, 1, 2, 3, 4, 5]
a[2, 3] = []
p a # => [0, 1, 5]
#@end
@raise TypeError 引数 start、length に整数以外の(暗黙の型変換が行えな
い)オブジェクトを指定した場合に発生します。
@raise TypeError 引数 val に配列以外の(暗黙の型変換が行えない)オブジェ
クトを指定した場合に発生します。
@raise IndexError 引数 start が自身の始点よりも前を指している場合に発生します。
@raise IndexError 引数 length に負の数を指定した場合に発生します。
--- +(other) -> Array
自身と other の内容を繋げた配列を生成して返します。
@param other 自身と繋げたい配列を指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによ
る暗黙の型変換を試みます。
@raise TypeError 引数に配列以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
a = [1, 2]
b = [8, 9]
p a + b #=> [1, 2, 8, 9]
p a #=> [1, 2] (変化なし)
p b #=> [8, 9] (こちらも変化なし)
#@end
--- *(times) -> Array
配列の内容を times 回 繰り返した新しい配列を作成して返します。
値はコピーされないことに注意してください。
@param times 繰り返したい回数を整数で指定します。
整数以外のオブジェクトを指定した場合は to_int メソッドによ
る暗黙の型変換を試みます。
@raise TypeError 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
@raise ArgumentError 引数に負の数を指定した場合に発生します。
#@samplecode 例
p [1, 2, 3] * 3 #=> [1, 2, 3, 1, 2, 3, 1, 2, 3]
#@end
--- *(sep) -> String
指定された sep を間にはさんで連結した文字列を生成して返します。[[m:Array#join]](sep) と同じ動作をします。
@param sep 文字列を指定します。
文字列以外のオブジェクトを指定した場合は to_str メソッドによ
る暗黙の型変換を試みます。
#@samplecode 例
p [1,2,3] * ","
# => "1,2,3"
#@end
@see [[m:Array#join]]
--- -(other) -> Array
自身から other の要素を取り除いた配列を生成して返します。
要素の同一性は [[m:Object#eql?]] により評価されます。
self 中で重複していて、other中に存在していなかった要素は、その重複が保持されます。
@param other 自身から取り除きたい要素の配列を指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによ
る暗黙の型変換を試みます。
@raise TypeError 引数に配列以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
[1, 2, 1, 3, 1, 4] - [4, 2] # => [1, 1, 3, 1]
[1, 2, 1, 3, 1, 4] - [1, 4] # => [2, 3]
#@end
#@since 2.6.0
@see [[m:Array#difference]]
--- difference(*other_arrays) -> Array
自身から other_arrays の要素を取り除いた配列を生成して返します。
要素の同一性は [[m:Object#hash]] と [[m:Object#eql?]] により評価されます。
self 中で重複していて、other_arrays中に存在していなかった要素は、その重複が保持されます。
新しい配列における要素の順は self における要素の順と同じです。
#@samplecode 例
[ 1, 1, 2, 2, 3, 3, 4, 5 ].difference([ 1, 2, 4 ]) # => [ 3, 3, 5 ]
[ 1, 'c', :s, 'yep' ].difference([ 1 ], [ 'a', 'c' ]) # => [:s, "yep"]
#@end
集合のような振る舞いが必要なら [[c:Set]] も参照してください。
@see [[m:Array#-]]
#@end
--- &(other) -> Array
集合の積演算です。両方の配列に含まれる要素からなる新しい配列を返
します。重複する要素は取り除かれます。
要素の重複判定は、[[m:Object#eql?]] により行われます。
新しい配列における要素の順は self における要素の順と同じです。
@param other 配列を指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによ
る暗黙の型変換を試みます。
@raise TypeError 引数に配列以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
[1, 1, 2, 3] & [3, 1, 4] #=> [1, 3]
#@end
#@since 2.7.0
@see [[m:Array#|]], [[m:Array#intersection]]
#@else
@see [[m:Array#|]]
#@end
--- |(other) -> Array
集合の和演算です。両方の配列にいずれかに含まれる要素を全て含む新し
い配列を返します。重複する要素は取り除かれます。
要素の重複判定は、[[m:Object#eql?]] と [[m:Object#hash]] により行われます。
新しい配列における要素の順は self における要素の順と同じです。
@param other 配列を指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによ
る暗黙の型変換を試みます。
@raise TypeError 引数に配列以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
[1, 1, 4, 2, 3] | [5, 4, 5] #=> [1, 4, 2, 3, 5]
#@end
@see [[m:Array#&]]
#@since 2.6.0
@see [[m:Array#union]]
--- union(*other_arrays) -> Array
集合の和演算です。self と other_arrays の配列にどれかに含まれる要素を
全て含む新しい配列を返します。重複する要素は取り除かれます。
要素の重複判定は、[[m:Object#eql?]] と [[m:Object#hash]] により行われます。
@param other_arrays 0個以上の配列を指定します。
#@samplecode 例
["a", "b", "c"].union([ "c", "d", "a" ]) #=> ["a", "b", "c", "d"]
["a"].union(["e", "b"], ["a", "c", "b"]) #=> ["a", "e", "b", "c"]
["a"].union # => ["a"]
#@end
@see [[m:Array#|]]
#@end
--- <<(obj) -> self
指定された obj を自身の末尾に破壊的に追加します。
#@samplecode 例
ary = [1]
ary << 2
p ary # [1, 2]
#@end
またこのメソッドは self を返すので、以下のように連続して
書くことができます。
#@samplecode 例
ary = [1]
ary << 2 << 3 << 4
p ary #=> [1, 2, 3, 4]
#@end
@param obj 自身に加えたいオブジェクトを指定します。[[m:Array#push]] と違って引数は一つしか指定できません。
@see [[m:Array#push]]
#@since 1.9.2
--- <=>(other) -> -1 | 0 | 1 | nil
#@else
--- <=>(other) -> -1 | 0 | 1
#@end
自身と other の各要素をそれぞれ順に <=> で比較していき、結果が 0 でなかった場合に
その値を返します。各要素が等しく、配列の長さも等しい場合には 0 を返します。
各要素が等しいまま一方だけ配列の末尾に達した時、自身の方が短ければ -1 をそうでなければ 1
を返します。
#@since 1.9.2
other に配列以外のオブジェクトを指定した場合は nil を返します。
#@end
@param other 自身と比較したい配列を指定します。
配列以外のオブジェクトを指定した場合は to_ary メソッドによ
る暗黙の型変換を試みます。
#@until 1.9.2
@raise TypeError 引数に配列以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@end
#@samplecode 例
[ 1, 2, 3 ] <=> [ 1, 3, 2 ] #=> -1
[ 1, 2, 3 ] <=> [ 1, 2, 3 ] #=> 0
[ 1, 2, 3 ] <=> [ 1, 2 ] #=> 1
#@end
--- ==(other) -> bool
自身と other の各要素をそれぞれ順に == で比較し
て、全要素が等しければ true を返します。そうでない場合には false を返します。
@param other 自身と比較したい配列を指定します。
@see [[m:Object#==]]
#@samplecode 例
[ "a", "c" ] == [ "a", "c", 7 ] #=> false
[ "a", "c", 7 ] == [ "a", "c", 7 ] #=> true
[ "a", "c", 7 ] == [ "a", "d", "f" ] #=> false
#@end
#@since 2.6.0
--- all? -> bool
--- all? {|item| ... } -> bool
--- all?(pattern) -> bool
すべての要素が真である場合に true を返します。
偽である要素があれば、ただちに false を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果
が真である場合に true を返します。ブロックが偽を返した時点で、
ただちに false を返します。
@param pattern ブロックの代わりに各要素に対して pattern === item を評価します。
#@samplecode 例
# すべて正の数か?
p [5, 6, 7].all? {|v| v > 0 } # => true
p [5, -1, 7].all? {|v| v > 0 } # => false
p [].all? {|v| v > 0 } # => true
p %w[ant bear cat].all?(/t/) # => false
#@end
@see [[m:Enumerable#all?]]
#@end
#@since 2.2.0
--- any? -> bool
--- any? {|item| ... } -> bool
#@since 2.5.0
--- any?(pattern) -> bool
#@end
すべての要素が偽である場合に false を返します。
真である要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果
が偽である場合に false を返します。ブロックが真を返した時点
で、ただちに true を返します。
#@since 2.5.0
@param pattern ブロックの代わりに各要素に対して pattern === item を評価します。
#@end
#@samplecode 例
p [1, 2, 3].any? {|v| v > 3 } # => false
p [1, 2, 3].any? {|v| v > 1 } # => true
p [].any? {|v| v > 0 } # => false
#@since 2.5.0
p %w[ant bear cat].any?(/d/) # => false
p [nil, true, 99].any?(Integer) # => true
p [nil, true, 99].any? # => true
p [].any? # => false
#@end
#@end
@see [[m:Enumerable#any?]]
#@end
--- assoc(key) -> Array | nil
配列の配列を検索して、その 0 番目の要素が key に == で等しい
最初の要素を返します。該当する要素がなければ nil を返します。
@param key 検索するオブジェクトを指定します。
#@samplecode 例
ary = [[1,15], [2,25], [3,35]]
p ary.assoc(2) # => [2, 25]
p ary.assoc(100) # => nil
p ary.assoc(15) # => nil
#@end
@see [[m:Array#rassoc]]
--- clear -> self
配列の要素をすべて削除して空にします。
#@samplecode 例
ary = [1, 2]
ary.clear
p ary #=> []
#@end
--- clone -> Array
--- dup -> Array
レシーバと同じ内容を持つ新しい配列を返します。
clone は frozen tainted singleton-class の情報も含めてコピーしますが、
dup は内容だけをコピーします。
またどちらのメソッドも要素それ自体のコピーはしません。
つまり「浅い(shallow)」コピーを行います。
#@samplecode 例
ary = ['string']
p ary #=> ["string"]
copy = ary.dup
p copy #=> ["string"]
ary[0][0...3] = ''
p ary #=> ["ing"]
p copy #=> ["ing"]
#@end
--- collect -> Enumerator
--- map -> Enumerator
--- collect {|item| ... } -> [object]
--- map {|item| ... } -> [object]
各要素に対してブロックを評価した結果を全て含む配列を返します。
ブロックを省略した場合は [[c:Enumerator]] を返します。
#@samplecode 例
# すべて 3 倍にする
p [1, 2, 3].map {|n| n * 3 } # => [3, 6, 9]
#@end
#@since 2.6.0
@see [[m:Hash#to_h]], [[m:Enumerable#collect]], [[m:Enumerable#map]]
#@else
@see [[m:Enumerable#collect]], [[m:Enumerable#map]]
#@end
--- collect! {|item| ..} -> self
--- map! {|item| ..} -> self
#@since 1.9.1
--- collect! -> Enumerator
--- map! -> Enumerator
#@else
--- collect! -> Enumerable::Enumerator
--- map! -> Enumerable::Enumerator
#@end
各要素を順番にブロックに渡して評価し、その結果で要素を
置き換えます。
ブロックが与えられなかった場合は、自身と map! から生成した
#@since 1.9.1
[[c:Enumerator]] オブジェクトを返します。
#@else
[[c:Enumerable::Enumerator]] オブジェクトを返します。
#@end
#@samplecode 例
ary = [1, 2, 3]
ary.map! {|i| i * 3 }
p ary #=> [3, 6, 9]
ary = [1, 2, 3]
e = ary.map!
e.each{ 1 }
p ary #=> [1, 1, 1]
#@end
#@since 1.9.1
@see [[m:Array#collect]], [[c:Enumerator]]
#@else
@see [[m:Array#collect]], [[c:Enumerable::Enumerator]]
#@end
--- compact -> Array
--- compact! -> self | nil
compact は自身から nil を取り除いた配列を生成して返します。
compact! は自身から破壊的に nil を取り除き、変更が
行われた場合は self を、そうでなければ nil を返します。
#@samplecode 例
ary = [1, nil, 2, nil, 3, nil]
p ary.compact #=> [1, 2, 3]
p ary #=> [1, nil, 2, nil, 3, nil]
ary.compact!
p ary #=> [1, 2, 3]
p ary.compact! #=> nil
#@end
--- concat(other) -> self
配列 other を自身の末尾に破壊的に連結します。
@param other 自身と連結したい配列を指定します。
#@samplecode 例
array = [1, 2]
a = [3, 4]
array.concat a
p array # => [1, 2, 3, 4]
p a # => [3, 4] # こちらは変わらない
#@end
#@since 2.4.0
--- concat(*other_arrays) -> self
other_arrays の要素を自身の末尾に破壊的に連結します。
@param other_arrays 自身と連結したい配列を指定します。
#@samplecode 例
[ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
[ "a" ].concat( ["b"], ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
[ "a" ].concat #=> [ "a" ]
a = [ 1, 2, 3 ]
a.concat( [ 4, 5 ] )
a #=> [ 1, 2, 3, 4, 5 ]
a = [ 1, 2 ]
a.concat(a, a) #=> [1, 2, 1, 2, 1, 2]
#@end
@see [[m:Array#+]]
#@end
--- count -> Integer
--- count(item) -> Integer
--- count {|obj| ... } -> Integer
レシーバの要素数を返します。
引数を指定しない場合は、配列の要素数を返します。
引数を一つ指定した場合は、レシーバの要素のうち引数に一致するものの
個数をカウントして返します(一致は == で判定します)。
ブロックを指定した場合は、ブロックを評価して真になった要素の個数を
カウントして返します。
@param item カウント対象となる値。
#@samplecode 例
ary = [1, 2, 4, 2.0]
ary.count # => 4
ary.count(2) # => 2
ary.count{|x|x%2==0} # => 3
#@end
@see [[m:Enumerable#count]]
--- delete(val) -> object | nil
--- delete(val) { ... } -> object
指定された val と == で等しい要素を自身からすべて取り除きます。
#@since 1.9.1
等しい要素が見つかった場合は最後に見つかった要素を、
#@else
等しい要素が見つかった場合は val を、
#@end
そうでない場合には nil を返します。
ブロックが与えられた場合、val と等しい要素が見つからなかったときにブロッ
クを評価してその結果を返します。
@param val 自身から削除したい値を指定します。
#@samplecode 例
array = [1, 2, 3, 2, 1]
p array.delete(2) #=> 2
p array #=> [1, 3, 1]
# ブロックなしの引数に nil を渡すとその戻り値から削除が
# 行われたかどうかの判定をすることはできない
ary = [nil,nil,nil]
p ary.delete(nil) #=> nil
p ary #=> []
p ary.delete(nil) #=> nil
#@end
--- delete_at(pos) -> object | nil
指定された位置 pos にある要素を取り除きそれを返します。
pos が範囲外であったら nil を返します。
[[m:Array#at]] と同様に負のインデックスで末尾から位置を指定するこ
とができます。
@param pos 削除したい要素のインデックスを整数で指定します。
整数以外のオブジェクトを指定した場合は to_int メソッドによる
暗黙の型変換を試みます。
@raise TypeError 引数に整数以外の(暗黙の型変換が行えない)オブジェクトを
指定した場合に発生します。
#@samplecode 例
array = [0, 1, 2, 3, 4]
array.delete_at 2
p array #=> [0, 1, 3, 4]
#@end
--- delete_if {|x| ... } -> self
--- reject! {|x| ... } -> self | nil
#@since 1.9.1
--- delete_if -> Enumerator
--- reject! -> Enumerator
#@else
--- delete_if -> Enumerable::Enumerator
--- reject! -> Enumerable::Enumerator
#@end
要素を順番にブロックに渡して評価し、その結果が真になった要素をすべて削除します。
delete_if は常に self を返しますが、reject! は要素が 1 つ以上削除されれば self を、
1 つも削除されなければ nil を返します。
ブロックが与えられなかった場合は、自身と reject! から生成した
#@since 1.9.1
[[c:Enumerator]] オブジェクトを返します。
#@else
[[c:Enumerable::Enumerator]] オブジェクトを返します。
#@end
返された Enumerator オブジェクトの each メソッドには、
もとの配列に対して副作用があることに注意してください。
#@samplecode 例
a = [0, 1, 2, 3, 4, 5]
a.delete_if{|x| x % 2 == 0}
p a #=> [1, 3, 5]
a = [0, 1, 2, 3, 4, 5]
e = a.reject!
e.each{|i| i % 2 == 0}
p a #=> [1, 3, 5] もとの配列から削除されていることに注意。
#@end
--- drop(n) -> Array
配列の先頭の n 要素を捨てて、
残りの要素を配列として返します。
このメソッドは自身を破壊的に変更しません。
@param n 捨てる要素数。
#@samplecode 例
a = [1, 2, 3, 4, 5, 0]
a.drop(3) # => [4, 5, 0]
# 変数aの値は変化しない
a # => [1, 2, 3, 4, 5, 0]
#@end
@see [[m:Enumerable#drop]], [[m:Array#drop_while]], [[m:Array#shift]]
--- drop_while -> Enumerator
--- drop_while {|element| ... } -> Array
ブロックを評価して最初に偽となった要素の手前の要素まで捨て、
残りの要素を配列として返します。
このメソッドは自身を破壊的に変更しません。
ブロックを指定しなかった場合は、[[c:Enumerator]] を返します。
#@samplecode 例
a = [1, 2, 3, 4, 5, 0]
a.drop_while {|i| i < 3 } # => [3, 4, 5, 0]
# 変数aの値は変化しない
a # => [1, 2, 3, 4, 5, 0]
#@end
@see [[m:Enumerable#drop_while]], [[m:Array#drop]]
--- each {|item| .... } -> self
#@since 1.9.1
--- each -> Enumerator
#@else
--- each -> Enumerable::Enumerator
#@end
各要素に対してブロックを評価します。
ブロックが与えられなかった場合は、自身と each から生成した
#@since 1.9.1
[[c:Enumerator]] オブジェクトを返します。
#@else
[[c:Enumerable::Enumerator]] オブジェクトを返します。
#@end
#@samplecode 例
[1, 2, 3].each do |i|
puts i
end
#=> 1
# 2
# 3
#@end
#@#
#@#each により(また、標準のメソッドで)複数の値を取得しながら繰り返す
#@#ことはできません。現在のところ以下のようなメソッドを定義する必要が
#@#あります。
#@#
#@# class Array
#@# def every(&block)
#@# arity = block.arity
#@# return self.each(&block) if arity <= 0
#@#
#@# i = 0
#@# while i < self.size
#@# yield(*self[i, arity])
#@# i += arity
#@# end
#@# self
#@# end
#@# end
#@#
#@# ary = [1,2,3]
#@# ary.every {|i| p i}
#@# # => 1
#@# # 2
#@# # 3
#@# ary.every {|i,j| p [i,j]}
#@# # => [1, 2]
#@# # [3, nil]
#@# ary.every {|i,j,k| p [i,j,k]}
#@# # => [1, 2, 3]
#@# ary.every {|*i| p *i}
#@# # => 1
#@# # 2
#@# # 3
@see [[m:Array#each_index]], [[m:Array#reverse_each]]
--- each_index {|index| .... } -> self
#@since 1.9.1
--- each_index -> Enumerator
#@else
--- each_index -> Enumerable::Enumerator
#@end