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_5.html
More file actions
335 lines (335 loc) · 14.8 KB
/
collections_5.html
File metadata and controls
335 lines (335 loc) · 14.8 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
<!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 -- 列トレイト Seq, IndexedSeq, および
LinearSeq</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_7.html"><img border="0"
alt="Set" 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_4.html"><img border="0"
alt="Iterable トレイト" src="previous.png" /></a></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>列トレイト
<tt>Seq</tt>、<tt>IndexedSeq</tt>、および <tt>LinearSeq</tt></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/seqs.html">Scala Documentation</a> に移行しました。
</blockquote>
<h1>列トレイト <tt>Seq</tt>、<tt>IndexedSeq</tt>、および
<tt>LinearSeq</tt></h1>
<p>列 (<a href=
"http://www.scala-lang.org/api/current/scala/collection/Seq.html"><tt>Seq</tt></a>)
トレイトは、長さ (<tt>length</tt>) があり、それぞれの要素に <tt>0</tt> から数えられた固定された添字
(index) がある <tt>Iterable</tt> の一種だ。</p>
<p><a href=
"collections_5.html#tab:seqops">以下の表</a>にまとめられた列の演算は以下のカテゴリーに分けることができる:</p>
<ul>
<li><em>添字と長さの</em>演算 <tt>apply</tt>, <tt>isDefinedAt</tt>,
<tt>length</tt>, <tt>indices</tt>, および <tt>lengthCompare</tt>。
<tt>Seq</tt> では <tt>apply</tt>
メソッドは添字の意味で使われるため、<tt>Seq[T]</tt>型の列は <tt>Int</tt> を引数 (添字)
としてをとり、<tt>T</tt>型の要素を返す部分関数だ。つまり、<tt>Seq[T]</tt> は
<tt>PartialFunction[Int,</tt> <tt>T]</tt> を継承する。列内の要素はゼロから列の長さ
(<tt>length</tt>) − 1 まで添字付けられている。列の <tt>length</tt>
メソッドは一般コレクションにおける <tt>size</tt> メソッドの別名だ。<tt>lengthCompare</tt>
メソッドは、たとえどちらかの列が無限の長さを持っていても、二つの列の長さを比較することができる。</li>
<li><em>添字検索演算</em>である <tt>indexOf</tt>, <tt>lastIndexOf</tt>,
<tt>indexofSlice</tt>, <tt>lastIndexOfSlice</tt>,
<tt>indexWhere</tt>, <tt>lastIndexWhere</tt>,
<tt>segmentLength</tt>, <tt>prefixLength</tt>
は、渡された値もしくは条件関数に合致する要素の添字を返す。</li>
<li><em>加算</em>である <tt>+:</tt>, <tt>:+</tt>, <tt>padTo</tt>
は、列の先頭か最後に要素を追加した新しい列を返す。</li>
<li><em>更新演算</em>である <tt>updated</tt>, <tt>patch</tt>
は、元の列に何らかの要素を上書きした列を返す。</li>
<li><em>並べ替え演算</em>である <tt>sorted</tt>, <tt>sortWith</tt>,
<tt>sortBy</tt> は、列内の要素を何らかの基準に基づいて並べ替える。</li>
<li><em>逆転演算</em>である <tt>reverse</tt>, <tt>reverseIterator</tt>,
<tt>reverseMap</tt> は、列内の要素を逆順に返すか処理する。</li>
<li><em>比較演算</em>である <tt>startsWith</tt>, <tt>endsWith</tt>,
<tt>contains</tt>, <tt>containsSlice</tt>, <tt>corresponds</tt>
は、二つの列を関連付けるか、列の中から要素を検索する。</li>
<li><em>集合演算</em>である <tt>intersect</tt>, <tt>diff</tt>,
<tt>union</tt>, <tt>distinct</tt>
は、二つの列間で集合演算のようなものを行うか、列内の要素の重複を削除する。</li>
</ul>
列が可変の場合は、追加で副作用のある <tt>update</tt> メソッドを提供し、列内の要素を上書きすることができる。
Scala
の他の構文の例にならって、<tt>seq(idx)</tt> <tt>=</tt> <tt>elem</tt> は
<tt>seq.update(idx,</tt> <tt>elem)</tt>
の略記法であるため、<tt>update</tt> によって便利な代入構文がただで手に入る。<tt>update</tt> と
<tt>updated</tt> の違いに注意してほしい。 <tt>update</tt>
は列内の要素を上書きし、可変列でのみ使用可能だ。<tt>updated</tt>
は全ての列で使用可能であり、元の列は変更せずに常に新しい列を返す。
<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/Seq.html"><tt>
Seq</tt></a> トレイトの演算 <a name="id1" id="id1"></a>
<a name="tab:seqops" id="tab:seqops"> </a></th>
</tr>
<tr>
<th align="left">使用例</th>
<th align="left">振る舞い</th>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">添字と長さの演算:</th>
</tr>
<tr>
<td align="left"><tt>xs(i)</tt></td>
<td align="left">
(展開した場合、<tt>xs</tt> <tt>apply</tt> <tt>i</tt>)。<tt>xs</tt>
の添字 <tt>i</tt> の位置の要素。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>isDefinedAt</tt> <tt>i</tt></td>
<td align="left"><tt>xs.indices</tt> に <tt>i</tt> が含まれているか調べる。</td>
</tr>
<tr>
<td align="left"><tt>xs.length</tt></td>
<td align="left">列の長さ (<tt>size</tt> と同様)。</td>
</tr>
<tr>
<td align="left"><tt>xs.lengthCompare</tt> <tt>ys</tt></td>
<td align="left"><tt>xs</tt> が <tt>ys</tt> より短い場合は
<tt>-1</tt>、長い場合は <tt>+1</tt>、同じ長さの場合は <tt>0</tt>
を返す。いずれかの列が無限でも正常に作動する。</td>
</tr>
<tr>
<td align="left"><tt>xs.indices</tt></td>
<td align="left">0 から
<tt>xs.length</tt> <tt>-</tt> <tt>1</tt> までの <tt>xs</tt>
の添字の範囲。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">添字検索演算:</th>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>indexOf</tt> <tt>x</tt></td>
<td align="left"><tt>xs</tt>内で <tt>x</tt> と等しい最初の要素の添字 (数種の別形がある)
。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>lastIndexOf</tt> <tt>x</tt></td>
<td align="left"><tt>xs</tt>内で <tt>x</tt> と等しい最後の要素の添字 (数種の別形がある)
。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>indexOfSlice</tt> <tt>ys</tt></td>
<td align="left"><tt>xs</tt> の添字で、それと後続の要素が、列 <tt>ys</tt>
と同値になる最初のもの。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>lastIndexOfSlice</tt> <tt>ys</tt></td>
<td align="left"><tt>xs</tt> の添字で、それと後続の要素が、列 <tt>ys</tt>
と同値になる最後のもの。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>indexWhere</tt> <tt>p</tt></td>
<td align="left"><tt>xs</tt>内で条件関数 <tt>p</tt> を満たす最初の要素の添字
(数種の別形がある)。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>segmentLength</tt> <tt>(p,</tt> <tt>i)</tt></td>
<td align="left">全ての要素が途切れなく条件関数 <tt>p</tt> を満たし、<tt>xs(i)</tt>
から始まる、最長の <tt>xs</tt> の切片の長さ。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>prefixLength</tt> <tt>p</tt></td>
<td align="left">全ての要素が途切れなく条件関数 <tt>p</tt> を満たす、最長の <tt>xs</tt>
の先頭切片の長さ。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">加算:</th>
</tr>
<tr>
<td align="left"><tt>x</tt> <tt>+:</tt> <tt>xs</tt></td>
<td align="left"><tt>xs</tt> の要素の先頭に <tt>x</tt> を追加した、新しい列。</td>
</tr>
<tr>
<td align="left"><tt>xs</tt> <tt>:+</tt> <tt>x</tt></td>
<td align="left"><tt>xs</tt> の要素の最後に <tt>x</tt> を追加した、新しい列。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>padTo</tt> <tt>(len,</tt> <tt>x)</tt></td>
<td align="left"><tt>xs</tt> の長さが <tt>len</tt> になるまで最後に値 <tt>x</tt>
を追加していった列。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">更新演算:</th>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>patch</tt> <tt>(i,</tt> <tt>ys,</tt> <tt>r)</tt></td>
<td align="left"><tt>xs</tt>内の、<tt>i</tt> から始まる <tt>r</tt>個の要素をパッチ
<tt>ys</tt>内の要素と置換した列。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>updated</tt> <tt>(i,</tt> <tt>x)</tt></td>
<td align="left"><tt>xs</tt>の添字 <tt>i</tt> の要素を <tt>x</tt>
に置換したコピー。</td>
</tr>
<tr>
<td align="left">
<tt>xs(i)</tt> <tt>=</tt> <tt>x</tt></td>
<td align="left">
(展開した場合、<tt>xs.update(i,</tt> <tt>x)</tt>、ただし可変列でのみ使用可能)。
<tt>xs</tt>の添字 <tt>i</tt> の位置の要素を <tt>x</tt> と上書きする。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">並べ替え演算:</th>
</tr>
<tr>
<td align="left"><tt>xs.sorted</tt></td>
<td align="left"><tt>xs</tt> の要素型の標準的な順序付けを用いて、<tt>xs</tt>
の要素を並べ替えることによって得られる新しい列。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>sortWith</tt> <tt>lt</tt></td>
<td align="left">比較関数 <tt>lt</tt> 用いて <tt>xs</tt>
の要素を並べ替えることによって得られる新しい列。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>sortBy</tt> <tt>f</tt></td>
<td align="left"><tt>xs</tt>
の要素を並べ替えることによって得られる新しい列。二つの要素の比較は、両者を関数 <tt>f</tt>
に適用してその結果を比較することによって行われる。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">逆転演算:</th>
</tr>
<tr>
<td align="left"><tt>xs.reverse</tt></td>
<td align="left"><tt>xs</tt>内の要素を逆順にした列。</td>
</tr>
<tr>
<td align="left"><tt>xs.reverseIterator</tt></td>
<td align="left"><tt>xs</tt>内の全ての要素を逆順に返すイテレータ。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>reverseMap</tt> <tt>f</tt></td>
<td align="left"><tt>xs</tt>内の要素に逆順に関数 <tt>f</tt> を map
して得られる列。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">比較演算:</th>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>startsWith</tt> <tt>ys</tt></td>
<td align="left"><tt>xs</tt> が列 <tt>ys</tt> から始まるかを調べる
(数種の別形がある)。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>endsWith</tt> <tt>ys</tt></td>
<td align="left"><tt>xs</tt> が列 <tt>ys</tt> で終わるかを調べる
(数種の別形がある)。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>contains</tt> <tt>x</tt></td>
<td align="left"><tt>xs</tt> が <tt>x</tt> と等しい要素を含むかを調べる。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>containsSlice</tt> <tt>ys</tt></td>
<td align="left"><tt>xs</tt> が <tt>ys</tt> と等しい連続した切片を含むかを調べる。</td>
</tr>
<tr>
<td align="left">
<tt>(xs</tt> <tt>corresponds</tt> <tt>ys)(p)</tt></td>
<td align="left"><tt>xs</tt> と <tt>ys</tt> の対応した要素が、二項条件関数の
<tt>p</tt> を満たすかを調べる。</td>
</tr>
<tr>
<th class="opcat" align="left" colspan="2">集合演算:</th>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>intersect</tt> <tt>ys</tt></td>
<td align="left">列 <tt>xs</tt> と <tt>ys</tt> の積集合で、<tt>xs</tt>
における要素の順序を保ったもの。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>diff</tt> <tt>ys</tt></td>
<td align="left">列 <tt>xs</tt> と <tt>ys</tt> の差集合で、<tt>xs</tt>
における要素の順序を保ったもの。</td>
</tr>
<tr>
<td align="left">
<tt>xs</tt> <tt>union</tt> <tt>ys</tt></td>
<td align="left">和集合; <tt>xs</tt> <tt>++</tt> <tt>ys</tt>
に同じ。</td>
</tr>
<tr>
<td align="left"><tt>xs.distinct</tt></td>
<td align="left"><tt>xs</tt> の部分列で要素の重複を一切含まないもの。</td>
</tr>
</tbody>
</table>
<p><a href=
"http://www.scala-lang.org/api/current/scala/collection/Seq.html"><tt>
Seq</tt></a> トレイトには <a href=
"http://www.scala-lang.org/api/current/scala/collection/LinearSeq.html">
<tt>LinearSeq</tt></a> と <a href=
"http://www.scala-lang.org/api/current/scala/collection/IndexedSeq.html">
<tt>IndexedSeq</tt></a>
という二つの子トレイトがある。これらは新しい演算を定義しないが、それぞれ異なった性能特性をもつ。線形列 (linear
sequence) は効率的な <tt>head</tt> と <tt>tail</tt> 演算を持ち、一方添字付き列
(indexed sequence) は効率的な<tt>apply</tt>。<tt>length</tt>、および (可変の場合)
<tt>update</tt> 演算を持つ。よく使われる線形列の例に
<tt>scala.collection.immutable.List</tt> と
<tt>scala.collection.immutable.Stream</tt> がある。よく使われる添字付き列の例としては
<tt>scala.Array</tt> と
<tt>scala.collection.mutable.ArrayBuffer</tt> がある。<tt>Vector</tt>
は添字付き列と線形列の間の興味深い折衷案だ。事実上定数時間のオーバーヘッドで添字アクセスと線形アクセスを提供するからだ。そのため、ベクトルは添字アクセスと線形アクセスの両方を混合して使用してるアクセスパターンにおける良い基盤となる。ベクトルに関しては、また<a href="collections_15.html">後ほど</a>。</p>
<p>続いては、</p>
<ul>
<li><a href="collections_6.html">バッファ</a></li>
</ul>
<hr />
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="collections_7.html"><img border="0"
alt="Set" 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_4.html"><img border="0"
alt="Iterable トレイト" src="previous.png" /></a></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>列トレイト
<tt>Seq</tt>、<tt>IndexedSeq</tt>、および <tt>LinearSeq</tt></b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href=
"collections_49.html">目次</a></td>
</tr>
</table>
</body>
</html>