This repository was archived by the owner on Mar 19, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcollections_43.html
More file actions
617 lines (617 loc) · 25.9 KB
/
collections_43.html
File metadata and controls
617 lines (617 loc) · 25.9 KB
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 25 March 2009), see www.w3.org" />
<title>Scala 2.8 コレクション API -- イテレータ</title>
<link rel="stylesheet" type="text/css" href="guide.css" />
</head>
<body dir="ltr">
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="collections_45.html"><img border="0"
alt="コレクションの作成" src="next.png" /></a></td>
<td bgcolor="#99CCFF"><a href="collections_0.html"><img border="0"
alt="トップ" src="up.png" /></a></td>
<td bgcolor="#99CCFF"><a href="collections_42.html"><img border="0"
alt="ビュー" src="previous.png" /></a></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>イテレータ</b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href=
"collections_49.html">目次</a></td>
</tr>
</table>
<blockquote style=
"border-left: 1px solid gray; font-family: Century, Times, 'Times New Roman', 'MS Gothic', serif; padding-left: 1em;">
最新版は <a href="http://docs.scala-lang.org/ja/overviews/collections/iterators.html">Scala Documentation</a> に移行しました。
</blockquote>
<h1>イテレータ</h1>
<p>イテレータ (<a href=
"http://www.scala-lang.org/api/current/scala/collection/Iterator.html"><tt>Iterator</tt></a>)
はコレクションではなく、コレクションから要素を一つづつアクセスするための方法だ。イテレータ <tt>it</tt>
に対する基本的な演算として <tt>next</tt> と <tt>hasNext</tt> の二つがある。
<tt>it.next()</tt> を呼び出すことで、次の要素が返り、イテレータの内部状態が前進する。よって、同じイテレータに対して
<tt>next</tt> を再び呼び出すと、前回返したものの次の要素が得られる。返す要素が無くなると、<tt>next</tt>
の呼び出しは <tt>NoSuchElementException</tt> を発生させる。返す要素が残っているかは <a href=
"http://www.scala-lang.org/api/current/scala/collection/Iterator.html">
<tt>Iterator</tt></a> の <tt>hasNext</tt> メソッドを使って調べることができる。</p>
<p>イテレータ <tt>it</tt> が返す全ての要素を渡り歩くのに最も率直な方法は while ループを使うことだ:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt><font color=
"#0000E5">while</font> (it.hasNext) </tt></td>
</tr>
<tr>
<td colspan="99" align="left">
<tt> println(it.next())</tt></td>
</tr>
</table>
</div>
<p><tt>Traversable</tt>、<tt>Iterable</tt>、および <tt>Seq</tt>
クラスのほとんどのメソッドに対して類似するものを Scala
のイテレータは提供している。たとえば、与えられた手順をイテレータが返す全ての要素に対して実行する <tt>foreach</tt>
メソッドを提供する。<tt>foreach</tt> を使うことで、先ほどのループは以下のように短縮できる:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left">
<tt>it foreach println</tt></td>
</tr>
</table>
</div>
<p>例にならって、<tt>foreach</tt>、<tt>map</tt>、<tt>withFilter</tt>、および
<tt>flatMap</tt> の代替構文として for
式を使うことができるので、イテレータが返す全ての要素を表示するもう一つの方法として以下のように書ける:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt><font color=
"#0000E5">for</font> (elem <- it) println(elem)</tt></td>
</tr>
</table>
</div>
<p>イテレータの <tt>foreach</tt> メソッドと traversable
の同メソッドには重大な違いがある。イテレータのそれを呼び出した場合、<tt>foreach</tt>
はイテレータを終端に置いたままで終了するということだ。そのため、<tt>next</tt> を再び呼び出すと
<tt>NoSuchElementException</tt>
を発生して失敗する。それに比べ、コレクションに対して呼び出した場合、<tt>foreach</tt>
はコレクション内の要素の数を変更しない
(渡された関数が要素を追加もしくは削除した場合は別の話だが、これは予想外の結果になることがあるので非推奨だ)。</p>
<p><a href=
"http://www.scala-lang.org/api/current/scala/collection/Iterator.html">
<tt>Iterator</tt></a> と <tt>Traversable</tt>
に共通の他の演算も同じ特性を持つ。例えば、イテレータは新たなイテレータを返す <tt>map</tt> メソッドを提供する:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt>scala> <font color=
"#0000E5">val</font> it = <font color=
"#660099">Iterator</font>(<font color=
"#000000">"a"</font>, <font color=
"#000000">"number"</font>, <font color=
"#000000">"of"</font>, <font color=
"#000000">"words"</font>)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">it: Iterator[java.lang.</font></tt><tt><font color=
"#590000">String] = non-empty iterator</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left">
<tt>scala> it.map(_.length)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">res1: Iterator[Int] = non-empty iterator</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left">
<tt>scala> res1 foreach println</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">1</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">6</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">2</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">5</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left">
<tt>scala> it.next()</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">java.util.</font></tt><tt><font color=
"#590000">NoSuchElementException: next on empty iterator</font></tt></td>
</tr>
</table>
</div>
<p>上記の通り、<tt>it.map</tt> の呼び出しの後、イテレータ <tt>it</tt>
は終端まで前進してしまっている。</p>
<p>次の具体例は、ある特性をもつイテレータ内の最初の要素を検索するのに使うことができる <tt>dropWhile</tt>
だ。例えば、イテレータ内で二文字以上の最初の語句を検索するのに、このように書くことができる:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt>scala> <font color=
"#0000E5">val</font> it = <font color=
"#660099">Iterator</font>(<font color=
"#000000">"a"</font>, <font color=
"#000000">"number"</font>, <font color=
"#000000">"of"</font>, <font color=
"#000000">"words"</font>)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">it: Iterator[java.lang.</font></tt><tt><font color=
"#590000">String] = non-empty iterator</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left">
<tt>scala> it dropWhile (_.length < <font color="#000000">2</font>)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">res4: Iterator[java.lang.</font></tt><tt><font color="#590000">String] = non-empty iterator</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left">
<tt>scala> it.next()</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">res5: java.lang.</font></tt><tt><font color=
"#590000">String = number</font></tt></td>
</tr>
</table>
</div>
<p><tt>dropWhile</tt> を呼び出すことで <tt>it</tt>
が変更された事に注意してほしい。イテレータは二番目の語句「number」を指している。実際に、<tt>it</tt> と
<tt>dropWhile</tt> の返した戻り値である <tt>res4</tt> 同じ要素の列を返す。</p>
<p>同じイテレータを再利用するための標準演算が一つだけある。以下の</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt><font color=
"#0000E5">val</font> (it1, it2) = it.duplicate</tt></td>
</tr>
</table>
</div>
<p>への呼び出しはイテレータ <tt>it</tt>
と全く同じ要素を返すイテレータを二つ返す。この二つのイテレータは独立して作動するため、片方を前進しても他方は影響を受けない。一方、元のイテレータ
<tt>it</tt> は <tt>duplicate</tt> により終端まで前進したため、使いものにならない。</p>
<p>
要約すると、イテレータは<em>メソッドを呼び出した後、絶対にアクセスしなければ</em>コレクションのように振る舞う。Scala
コレクションライブラリは、 <a href=
"http://www.scala-lang.org/api/current/scala/collection/Traversable.html">
<tt>Traversable</tt></a> と <a href=
"http://www.scala-lang.org/api/current/scala/collection/Iterator.html">
<tt>Iterator</tt></a> に共通の親クラスである <a href=
"http://www.scala-lang.org/api/current/scala/collection/TraversableOnce.html">
<tt>TraversableOnce</tt></a> を提供することで、明示的にこれを示す。名前が示す通り、 <a href=
"http://www.scala-lang.org/api/current/scala/collection/TraversableOnce.html">
<tt>TraversableOnce</tt></a> は <tt>foreach</tt>
を用いて一度だけ探索することができるが、探索後のそのオブジェクトの状態は指定されていない。 <a href=
"http://www.scala-lang.org/api/current/scala/collection/TraversableOnce.html">
<tt>TraversableOnce</tt></a> オブジェクトが <a href=
"http://www.scala-lang.org/api/current/scala/collection/Iterator.html">
<tt>Iterator</tt></a> ならば、探索後はその終端にあるし、もし <a href=
"http://www.scala-lang.org/api/current/scala/collection/Traversable.html">
<tt>Traversable</tt></a> ならば、そのオブジェクトは今まで通り存在する。 <a href=
"http://www.scala-lang.org/api/current/scala/collection/TraversableOnce.html">
<tt>TraversableOnce</tt></a> のよく使われる事例としては、イテレータか
<tt>Traversable</tt> を受け取ることができるメソッドの引数の型だ。その例として、 <a href=
"http://www.scala-lang.org/api/current/scala/collection/Traversable.html">
<tt>Traversable</tt></a> クラスの追加メソッド <tt>++</tt>
がある。<tt>TraversableOnce</tt> パラメータを受け取るため、イテレータか
<tt>Traversable</tt> なコレクションの要素を追加することができる。</p>
<p>イテレータの全演算は<a href=
"collections_43.html#tab:iteratorops">次の表</a>にまとめられている。</p>
<table border="0" cellspacing="0" class="ops">
<tbody>
<tr>
<th align="center" colspan="2">
<a href="http://www.scala-lang.org/api/current/scala/collection/Iterator.html">
<tt>Iterator</tt></a> トレイトの演算
<a name="tab:iteratorops" id="tab:iteratorops"> </a></th>
</tr>
<tr>
<th align="left" width="250">使用例</th>
<th align="left">振る舞い</th>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">抽象メソッド:</th>
</tr>
<tr>
<td align="left"><tt>it.next()</tt></td>
<td align="left">イテレータの次の要素を返し、前進させる。</td>
</tr>
<tr>
<td align="left"><tt>it.hasNext</tt></td>
<td align="left"><tt>it</tt> が次の要素を返せる場合、<tt>true</tt> を返す。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">他のイテレータ:</th>
</tr>
<tr>
<td align="left"><tt>it.buffered</tt></td>
<td align="left"><tt>it</tt> が返す全ての要素を返すバッファ付きイテレータ。</td>
</tr>
<tr>
<td align="left">
<p><tt>it</tt> <tt>grouped</tt> <tt>size</tt></p>
</td>
<td align="left"><tt>it</tt> が返す要素を固定サイズの「かたまり」にして返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>sliding</tt> <tt>size</tt></td>
<td align="left"><tt>it</tt> が返す要素を固定サイズの「窓」をスライドさせて返すイテレータ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">複製:</th>
</tr>
<tr>
<td align="left"><tt>it.duplicate</tt></td>
<td align="left"><tt>it</tt> が返す全ての要素を独立して返すイテレータのペア。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">加算:</th>
</tr>
<tr>
<td align="left"><tt>it</tt> <tt>++</tt> <tt>jt</tt></td>
<td align="left">イテレータ <tt>it</tt> が返す全ての要素に続いてイテレータ <tt>jt</tt>
の全ての要素を返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>padTo</tt> <tt>(len,</tt> <tt>x)</tt></td>
<td align="left">全体で <tt>len</tt>個の要素が返るように、イテレータ <tt>it</tt>
の全ての要素に続いて <tt>x</tt> を返すイテレータ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">map 演算:</th>
</tr>
<tr>
<td align="left"><tt>it</tt> <tt>map</tt> <tt>f</tt></td>
<td align="left"><tt>it</tt> が返す全ての要素に関数 <tt>f</tt>
を適用することによって得られるイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>flatMap</tt> <tt>f</tt></td>
<td align="left"><tt>it</tt> が返す全ての要素に対してイテレータ値を返す関数 <tt>f</tt>
を適用し、その結果を連結したイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>collect</tt> <tt>f</tt></td>
<td align="left"><tt>it</tt> が返す全ての要素に対して部分関数 <tt>f</tt>
が定義されている場合のみ適応し、その結果を集めたイテレータ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">変換演算:</th>
<td align="left"></td>
</tr>
<tr>
<td align="left"><tt>it.toArray</tt></td>
<td align="left"><tt>it</tt> が返す要素を配列に集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toList</tt></td>
<td align="left"><tt>it</tt> が返す要素をリストに集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toIterable</tt></td>
<td align="left"><tt>it</tt> が返す要素を iterable に集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toSeq</tt></td>
<td align="left"><tt>it</tt> が返す要素を列に集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toIndexedSeq</tt></td>
<td align="left"><tt>it</tt> が返す要素を添字付き列に集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toStream</tt></td>
<td align="left"><tt>it</tt> が返す要素をストリームに集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toSet</tt></td>
<td align="left"><tt>it</tt> が返す要素を集合に集める。</td>
</tr>
<tr>
<td align="left"><tt>it.toMap</tt></td>
<td align="left"><tt>it</tt> が返すキー/値ペアをマップに集める。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">コピー演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>copyToBuffer</tt> <tt>buf</tt></td>
<td align="left"><tt>it</tt> が返す要素をバッファ <tt>buf</tt> にコピーする。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>copyToArray(arr,</tt> <tt>s,</tt> <tt>n)</tt></td>
<td align="left"><tt>it</tt> が返す最大 <tt>n</tt> 個の要素を配列 <tt>arr</tt>
の添字 <tt>s</tt> より始まる位置にコピーする。最後の2つの引数は省略可能だ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">サイズ演算:</th>
</tr>
<tr>
<td align="left"><tt>it.isEmpty</tt></td>
<td align="left">イテレータが空であるかどうかを調べる (<tt>hasNext</tt> の逆)。</td>
</tr>
<tr>
<td align="left"><tt>it.nonEmpty</tt></td>
<td align="left">イテレータに要素が含まれているかを調べる (<tt>hasNext</tt> の別名)。</td>
</tr>
<tr>
<td align="left"><tt>it.size</tt></td>
<td align="left"><tt>it</tt> が返す要素の数。注意: この演算の後、<tt>it</tt>
は終端まで前進する!</td>
</tr>
<tr>
<td align="left"><tt>it.length</tt></td>
<td align="left"><tt>it.size</tt> に同じ。</td>
</tr>
<tr>
<td align="left"><tt>it.hasDefiniteSize</tt></td>
<td align="left"><tt>it</tt> が有限数の要素を返すことが明らかな場合 true を返す (デフォルトでは
<tt>isEmpty</tt> に同じ)。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">要素取得演算・添字検索演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>find</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す要素の中で条件関数 <tt>p</tt>
を満たす最初の要素のオプション値、または条件を満たす要素が無い場合 <tt>None</tt>。注意:
イテレータは探しだされた要素の次の要素、それが無い場合は終端まで前進する。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>indexOf</tt> <tt>x</tt></td>
<td align="left"><tt>it</tt> が返す要素の中で <tt>x</tt> と等しい最初の要素の添字。注意:
イテレータはこの要素の次の位置まで前進する。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>indexWhere</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す要素の中で条件関数 <tt>p</tt>
を満たす最初の要素の添字、注意: イテレータはこの要素の次の位置まで前進する。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">部分イテレータ演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>take</tt> <tt>n</tt></td>
<td align="left"><tt>it</tt> が返す最初の <tt>n</tt>個の要素を返すイテレータ。注意:
<tt>it</tt>
は、<tt>n</tt>個目の要素の次の位置、または<tt>n</tt>個以下の要素を含む場合は終端まで前進する。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>drop</tt> <tt>n</tt></td>
<td align="left"><tt>it</tt> の <tt>(n+1)</tt>番目の要素から始まるイテレータ。注意:
<tt>it</tt> も同じ位置まで前進する。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>slice</tt> <tt>(m,n)</tt></td>
<td align="left"><tt>it</tt> が返す要素の内、<tt>m</tt>番目から始まり
<tt>n</tt>番目の一つ前で終わる切片を返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>takeWhile</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す要素を最初から次々とみて、条件関数 <tt>p</tt>
を満たす限り返していったイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>dropWhile</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す要素を最初から次々とみて、条件関数 <tt>p</tt>
を満たす限り飛ばしていき、残りを返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>filter</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返すの要素で条件関数 <tt>p</tt>
を満たすものを返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>withFilter</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> <tt>filter</tt> <tt>p</tt>
に同じ。イテレータが for 式で使えるように用意されている。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>filterNot</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返すの要素で条件関数 <tt>p</tt>
を満たさないものを返すイテレータ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">分割演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>partition</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> を二つのイテレータから成るペアに分割する。片方のイテレータは
<tt>it</tt> が返す要素のうち条件関数 <tt>p</tt> を満たすものを返し、もう一方は <tt>it</tt>
が返す要素のうち <tt>p</tt> を満たさないものを返す。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">要素条件演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>forall</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す全ての要素に条件関数 <tt>p</tt> が当てはまるかを示す
boolean 値。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>exists</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す要素の中に条件関数 <tt>p</tt>
を満たすものがあるかどうかを示す boolean 値。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>count</tt> <tt>p</tt></td>
<td align="left"><tt>it</tt> が返す要素の中にで条件関数 <tt>p</tt> 満たすものの数。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">fold 演算:</th>
</tr>
<tr>
<td align="left">
<tt>(z</tt> <tt>/:</tt> <tt>it)(op)</tt></td>
<td align="left"><tt>z</tt> から始めて、左から右へと <tt>it</tt> が返す隣接する要素に二項演算
<tt>op</tt> を次々と適用したもの。</td>
</tr>
<tr>
<td align="left">
<tt>(it</tt> <tt>:<i>\</i></tt> <tt>z)(op)</tt></td>
<td align="left"><tt>z</tt> から始めて、右から左へと <tt>it</tt> が返す隣接する要素に二項演算
<tt>op</tt> を次々と適用したもの。</td>
</tr>
<tr>
<td align="left"><tt>it.foldLeft(z)(op)</tt></td>
<td align="left"><tt>(z</tt> <tt>/:</tt> <tt>it)(op)</tt>
に同じ。</td>
</tr>
<tr>
<td align="left"><tt>it.foldRight(z)(op)</tt></td>
<td align="left">
<tt>(it</tt> <tt>:<i>\</i></tt> <tt>z)(op)</tt> に同じ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>reduceLeft</tt> <tt>op</tt></td>
<td align="left">左から右へと、空ではないイテレータ <tt>it</tt> が返す隣接する要素に二項演算
<tt>op</tt> を次々と適用したもの。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>reduceRight</tt> <tt>op</tt></td>
<td align="left">右から左へと、空ではないイテレータ <tt>it</tt> が返す隣接する要素に二項演算
<tt>op</tt> を次々と適用したもの。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">特定 fold 演算:</th>
</tr>
<tr>
<td align="left"><tt>it.sum</tt></td>
<td align="left">イテレータ <tt>it</tt> が返すの数値要素の値の和。</td>
</tr>
<tr>
<td align="left"><tt>it.product</tt></td>
<td align="left">イテレータ <tt>it</tt> が返すの数値要素の値の積。</td>
</tr>
<tr>
<td align="left"><tt>it.min</tt></td>
<td align="left">イテレータ <tt>it</tt> が返す順序付けされたの値の最小値。</td>
</tr>
<tr>
<td align="left"><tt>it.max</tt></td>
<td align="left">イテレータ <tt>it</tt> が返す順序付けされたの値の最大値。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">zip 演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>zip</tt> <tt>jt</tt></td>
<td align="left">イテレータ <tt>it</tt> と <tt>jt</tt>
が返す要素から対応したものペアにして返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>zipAll</tt> <tt>(jt,</tt> <tt>x,</tt> <tt>y)</tt></td>
<td align="left">イテレータ <tt>it</tt> と <tt>jt</tt>
が返す要素から対応したものペアにして返すイテレータで、もし片方が短い場合は <tt>x</tt> か <tt>y</tt>
を使って長いほうに合わせる。</td>
</tr>
<tr>
<td align="left"><tt>it.zipWithIndex</tt></td>
<td align="left"><tt>it</tt> が返す要素とその添字をペアにしたイテレータ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">更新演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>patch</tt> <tt>(i,</tt> <tt>jt,</tt> <tt>r)</tt></td>
<td align="left"><tt>it</tt> の、<tt>i</tt> から始まる
<tt>r</tt>個の要素をパッチイテレータ <tt>ji</tt> が返す要素に置換したイテレータ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">比較演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>sameElements</tt> <tt>jt</tt></td>
<td align="left">イテレータ <tt>it</tt> と <tt>jt</tt>
が同じ要素を同じ順序で返すかを調べる。注意: この演算の後、<tt>it</tt> の <tt>jt</tt>
少なくともどちらか一方は終端まで前進している。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">文字列演算:</th>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>addString</tt> <tt>(b,</tt> <tt>start,</tt> <tt>sep,</tt> <tt>end)</tt></td>
<td align="left"><tt>it</tt> が返す要素を <tt>sep</tt>
で区切った後、<tt>start</tt> と <tt>end</tt>
で挟んだ文字列を <tt>StringBuilder</tt> <tt>b</tt> に追加する。 <tt>start</tt>,
<tt>sep</tt>, <tt>end</tt> は全て省略可能。</td>
</tr>
<tr>
<td align="left">
<tt>it</tt> <tt>mkString</tt> <tt>(start,</tt> <tt>sep,</tt> <tt>end)</tt></td>
<td align="left"><tt>it</tt> が返す要素を <tt>sep</tt>
で区切った後、<tt>start</tt> と <tt>end</tt> で挟んだ文字列に変換する。 <tt>start</tt>,
<tt>sep</tt>, <tt>end</tt> は全て省略可能。</td>
</tr>
</tbody>
</table>
<p>続いては、</p>
<ul>
<li><a href="collections_44.html">バッファ付きイテレータ</a></li>
</ul>
<hr />
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="collections_45.html"><img border="0"
alt="コレクションの作成" src="next.png" /></a></td>
<td bgcolor="#99CCFF"><a href="collections_0.html"><img border="0"
alt="トップ" src="up.png" /></a></td>
<td bgcolor="#99CCFF"><a href="collections_42.html"><img border="0"
alt="ビュー" src="previous.png" /></a></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>イテレータ</b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href=
"collections_49.html">目次</a></td>
</tr>
</table>
</body>
</html>