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_45.html
More file actions
231 lines (231 loc) · 10.6 KB
/
collections_45.html
File metadata and controls
231 lines (231 loc) · 10.6 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
<!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_46.html"><img border="0"
alt="Java と Scala 間のコレクションの変換" 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_43.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/creating-collections-from-scratch.html">Scala Documentation</a> に移行しました。
</blockquote>
<h1>コレクションの作成</h1>
<p><tt>List(1,</tt> <tt>2,</tt> <tt>3)</tt> 構文によって
3つの整数から成るリストを作成でき、<tt>Map('A'</tt> <tt>-></tt> <tt>1,</tt> <tt>'C'</tt> <tt>-></tt> <tt>2)</tt>
構文によって 2つの写像から成るマップを作成することができる。これは Scala
コレクションの統一された機能だ。どのコレクションを取っても、その名前に括弧付けされた要素のリストを付け加えることができる。結果は渡された要素から成る新しいコレクションだ。以下に具体例で説明する:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">Traversable</font>() <i>// 空の traversable オブジェクト</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">List</font>() <i>// 空のリスト</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">List</font>(<font color=
"#000000">1.0</font>, <font color=
"#000000">2.0</font>) <i>// 要素 1.0, 2.0
を含むリスト</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">Vector</font>(<font color=
"#000000">1.0</font>, <font color=
"#000000">2.0</font>) <i>// 要素 1.0, 2.0
を含むベクトル</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">Iterator</font>(<font color=
"#000000">1</font>, <font color=
"#000000">2</font>, <font color=
"#000000">3</font>) <i>// 3つの整数を返すイテレータ</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">Set</font>(dog, cat, bird) <i>// 3種類の動物の集合</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">HashSet</font>(dog, cat, bird) <i>// 同じ動物のハッシュ集合</i></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#660099">Map</font>(a -> <font color=
"#000000">7</font>, <font color=
"#000000">'b'</font> -> <font color=
"#000000">0</font>) <i>// 文字から整数へのマップ</i></tt></td>
</tr>
</table>
</div>
<p>上の全ての行での呼び出しは内部では何らかのオブジェクトの <tt>apply</tt>
メソッドを呼び出している。例えば、3行目は以下のように展開する:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt>List.apply(<font color=
"#000000">1.0</font>, <font color=
"#000000">2.0</font>)</tt></td>
</tr>
</table>
</div>
<p>つまり、これは <tt>List</tt> クラスのコンパニオンオブジェクトの <tt>apply</tt>
メソッドを呼び出している。このメソッドは任意の数の引数を取り、それを使ってリストを構築する。Scala
ライブラリの全てのコレクションクラスには、コンパニオンオブジェクトがあり、そのような <tt>apply</tt>
メソッドを定義する。コレクションクラスが <tt>List</tt>、<tt>Stream</tt>、や<tt>Vector</tt>
のような具象実装を表しているのか、<tt>Seq</tt>、<tt>Set</tt>、や <tt>Traversable</tt>
のような抽象基底クラスを表しているのかは関係ない。後者の場合は、apply
の呼び出しは抽象基底クラスの何らかのデフォルト実装を作成するだけのことだ。用例:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt>scala> <font color=
"#660099">List</font>(<font color=
"#000000">1</font>, <font color=
"#000000">2</font>, <font color="#000000">3</font>)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color="#590000">res0:
List[Int] = List(2, 3, 4)</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt>scala> <font color=
"#660099">Traversable</font>(<font color=
"#000000">1</font>, <font color=
"#000000">2</font>, <font color="#000000">3</font>)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">res18: Traversable[Int] = List(1, 2, 3)</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt>scala> <font color=
"#660099">mutable.</font></tt><tt><font color=
"#660099">Traversable</font>(<font color=
"#000000">1</font>, <font color=
"#000000">2</font>, <font color="#000000">3</font>)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color=
"#590000">res19: scala.collection.mutable.</font></tt><tt><font color="#590000">Traversable[Int] = ArrayBuffer(1, 2, 3)</font></tt></td>
</tr>
</table>
</div>
<p><tt>apply</tt> とは別に、全てのコレクションのコンパニオンオブジェクトは、空のコレクションを返す
<tt>empty</tt> を定義する。よって、<tt>List()</tt> の代わりに <tt>List.empty</tt>
と書いたり、<tt>Map()</tt> の代わりに <tt>Map.empty</tt> と書くことができる。</p>
<p><tt>Seq</tt> を継承するクラスは、コンパニオンオブジェクトにおいて他の factory
演算を提供する。以下の表にこれらの演算をまとめた。要約すると、</p>
<ul>
<li><tt>concat</tt> は任意の数の traversable を連結する。</li>
<li><tt>fill</tt> と <tt>tabulate</tt>
は単次元か任意の多次元の列を生成して、なんらかの式かテーブル化関数によりその列を初期化する。</li>
<li><tt>range</tt> は一定のステップ値で整数の列を生成する。</li>
<li><tt>iterate</tt> は開始要素に連続して関数を適用することによって得られる列を生成する。</li>
</ul>
<table border="0" cellspacing="0" class="ops">
<tbody>
<tr>
<th align="center" colspan="2">列の factory 演算
<a name="tab:seqfac" id="tab:seqfac"> </a></th>
</tr>
<tr>
<th align="left" width="250">使用例</th>
<th align="left">振る舞い</th>
</tr>
<tr>
<td align="left">
<p><tt>S.empty</tt></p>
</td>
<td align="left">空の列。</td>
</tr>
<tr>
<td align="left">
<tt>S(x,</tt> <tt>y,</tt> <tt>z)</tt></td>
<td align="left">要素 <tt>x</tt>, <tt>y</tt>, <tt>z</tt> から成る列。</td>
</tr>
<tr>
<td align="left">
<tt>S.concat(xs,</tt> <tt>ys,</tt> <tt>zs)</tt></td>
<td align="left"><tt>xs</tt>, <tt>ys</tt>, <tt>zs</tt>
の要素を連結することによって得られる列。</td>
</tr>
<tr>
<td align="left"><tt>S.fill(n){e}</tt></td>
<td align="left">全ての要素が式 <tt>e</tt> によって計算された長さ <tt>n</tt> の列。</td>
</tr>
<tr>
<td align="left"><tt>S.fill(m,</tt> <tt>n){e}</tt></td>
<td align="left">全ての要素が式 <tt>e</tt> によって計算された
<tt>m</tt><i>×</i><tt>n</tt> の大きさの列の列。(より高次元なものもある)</td>
</tr>
<tr>
<td align="left"><tt>S.tabulate(n){f}</tt></td>
<td align="left">添字 <i>i</i> の位置の要素が <tt>f(<i>i</i>)</tt>
によって計算された長さ <tt>n</tt> の列。</td>
</tr>
<tr>
<td align="left"><tt>S.tabulate(m,</tt> <tt>n){f}</tt></td>
<td align="left">添字 (<i>i</i>, <i>j</i>) の位置の要素が
<tt>f(<i>i</i>,</tt> <tt><i>j</i>)</tt> によって計算された
<tt>m</tt><i>×</i><tt>n</tt> の大きさの列の列。(より高次元なものもある)</td>
</tr>
<tr>
<td align="left"><tt>S.range(start,</tt> <tt>end)</tt></td>
<td align="left"><tt>start</tt> <i>...</i> <tt>end-1</tt>
の整数の列。</td>
</tr>
<tr>
<td align="left">
<tt>S.range(start,</tt> <tt>end,</tt> <tt>step)</tt></td>
<td align="left"><tt>start</tt> より始まり <tt>end</tt> 未満まで
<tt>step</tt> づつ増加する整数の列。</td>
</tr>
<tr>
<td align="left"><tt>S.iterate(x,</tt> <tt>n)(f)</tt></td>
<td align="left">要素 <tt>x</tt>, <tt>f(x)</tt>, <tt>f(f(x))</tt>,
<i>...</i> から成る長さ <tt>n</tt> の列。</td>
</tr>
</tbody>
</table>
<p>続いては、<a href="collections_46.html">Java と Scala
間のコレクションの変換</a></p>
<hr />
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="collections_46.html"><img border="0"
alt="Java と Scala 間のコレクションの変換" 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_43.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>