multiset 0.5.1 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/History.txt +10 -0
- data/README.txt +3 -0
- data/lib/multimap.rb +135 -132
- data/lib/multiset.rb +327 -269
- data/spec/multiset_spec.rb +42 -42
- metadata +24 -21
- data/.gemtest +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZTg5YzE1NmQzYTYzM2I5ODAxMmIzMDdiMDI0ODI0YWJjMDhhYzMwZg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a7c8af89e0f0f6799fffe4ded50e5fd4c18ae970
|
4
|
+
data.tar.gz: 32333ad6798227b37eb6c9430a4ce57d21a5a95e
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
Y2ZlM2VjMzQ1MmRlMjRjNzNiNmUyNjBiMjgxM2Q4NGNiYzYwMzk3MGQ0ZDBi
|
11
|
-
YzQxMjZkMWYxMGNmYzg5YmEyOWM1MGFlYTM0ZWJiOTY2NDk4ZDQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NThjZDRhZTlhOWRmYzU3ZGE0NjI4NzM4MGMwZjAyOThmZjFlMzQxNGQ5MDAz
|
14
|
-
M2QyOGNlOTdkMzM2MGE0NGJhZWQwYjBmZDM2Y2UyMDg4MmI1ZmMxMDQ0Zjc2
|
15
|
-
YzVmMjllYzg2MDJhMzhmMTAwMDBkOTY0MzJhNTI1ODE3MjJlOTc=
|
6
|
+
metadata.gz: 2872da1b9db75cc7a04980d1efa2b153d95d4d2713472285038a80ce6f7ace40a04d4e3fcb04ef68d9fb1ba4870e0bb15f3676d1b14d9084df023cb9401efda3
|
7
|
+
data.tar.gz: 650b478fb6144d634032f36e18ecf796f63b21cb23ca20c38e7213fdfbe36d0ae2082092d133cfa51d8464bc1b0ef9aef74923fded3c533e79c2f883a5e3838f
|
data/History.txt
CHANGED
@@ -230,3 +230,13 @@
|
|
230
230
|
|
231
231
|
(en)
|
232
232
|
* Fixed argument descriptions of some methods in the RDoc document.
|
233
|
+
|
234
|
+
=== 0.5.3 / 2017-04-28
|
235
|
+
|
236
|
+
(ja)
|
237
|
+
* ドキュメントを修正(特に英語の記述について)。
|
238
|
+
* Multimap#each_key が、ブロックを与えない場合にEnumeratorを返すようにした。
|
239
|
+
|
240
|
+
(en)
|
241
|
+
* Fixed documentation, especially in English writing.
|
242
|
+
* Multimap#each_key returns an Enumerator if no block is given.
|
data/README.txt
CHANGED
@@ -19,6 +19,9 @@ Multisets are typically used for counting elements and their appearances in coll
|
|
19
19
|
|
20
20
|
== SYNOPSIS:
|
21
21
|
|
22
|
+
The document for detailed APIs can be generated by rdoc. http://docs.ruby-lang.org/en/2.2.0/RDoc/Markup.html
|
23
|
+
Rdoc-generated document is available at: http://maraigue.hhiro.net/multiset/doc5/
|
24
|
+
|
22
25
|
# Creating a multiset
|
23
26
|
Set[:a,:b,:c,:b,:b,:c] # => #<Set: {:b, :c, :a}>
|
24
27
|
Multiset[:a,:b,:c,:b,:b,:c] # => #<Multiset:#3 :b, #2 :c, #1 :a>
|
data/lib/multimap.rb
CHANGED
@@ -5,20 +5,18 @@ require "multiset"
|
|
5
5
|
|
6
6
|
#==概要(Basic information)
|
7
7
|
#
|
8
|
-
#Ruby
|
9
|
-
|
10
|
-
#
|
8
|
+
# Ruby implementation of multimap.
|
9
|
+
# Unlike ordinary map, also known as associative array
|
10
|
+
# (see Ruby documentation for "Hash" class),
|
11
|
+
# multimap can contain two or more items for a key.
|
11
12
|
#
|
12
|
-
|
13
|
-
#メソッドの大部分を実装していますが、いくつか未実装なものもあります。
|
13
|
+
# Methods' names are basically consistent with those of Hash class.
|
14
14
|
#
|
15
|
-
#Ruby
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#multimap can contain two or more items for a key.
|
15
|
+
# Rubyによる多重連想配列(マルチマップ)の実装です。
|
16
|
+
# 通常の連想配列(Rubyでは"Hash"クラス)と異なり、多重連想配列は
|
17
|
+
# 1つのキーに対して複数の要素が存在し得ます。
|
19
18
|
#
|
20
|
-
#
|
21
|
-
#a few methods in Hash class is implemented on Multimap class.
|
19
|
+
# メソッド名は基本的にHashクラスに合わせてあります。
|
22
20
|
|
23
21
|
class Multimap
|
24
22
|
include Enumerable
|
@@ -27,11 +25,11 @@ class Multimap
|
|
27
25
|
# Constructors
|
28
26
|
#++
|
29
27
|
|
28
|
+
# Generates a new multimap. Different from Hash#new , you cannot
|
29
|
+
# specify default value.
|
30
|
+
#
|
30
31
|
# 新しい多重連想配列を生成します。Hash#newと異なり、デフォルト値は
|
31
32
|
# 設定できません。
|
32
|
-
#
|
33
|
-
# Generates a new multimap. Different from Hash#new , you can not
|
34
|
-
# specify default value.
|
35
33
|
def initialize
|
36
34
|
@assoc = Hash.new{ |hash, key| hash[key] = Multiset.new }
|
37
35
|
end
|
@@ -43,31 +41,34 @@ class Multimap
|
|
43
41
|
end
|
44
42
|
private :cleanup
|
45
43
|
|
46
|
-
#
|
47
|
-
# Multiset
|
48
|
-
#
|
49
|
-
# (そのような場合、空のMultisetが返ります。)
|
50
|
-
#
|
51
|
-
# Returns values associated with <code>key</code> with format of
|
52
|
-
# Multiset. Different from Hash#fetch, you can not specify
|
53
|
-
# a value or a process when <code>key</code> has not associated with
|
54
|
-
# any value. If <code>key</code> has not associated with any value,
|
44
|
+
# Returns values associated with <code>key</code>, which may exist
|
45
|
+
# two or more, by the format of Multiset.
|
46
|
+
# If <code>key</code> has not associated with any value,
|
55
47
|
# Multimap#fetch returns empty Multiset.
|
48
|
+
# Different from Hash#fetch, you cannot specify
|
49
|
+
# a value or a process when <code>key</code> has not associated with
|
50
|
+
# any value.
|
51
|
+
#
|
52
|
+
# キー<code>key</code>に対応する値(複数存在しうる)を、
|
53
|
+
# Multisetとして返します。
|
54
|
+
# キーに対応する値が存在しない場合、空のMultisetが返ります。
|
55
|
+
# Hash#fetchの場合と異なり、キーに対応する値が存在しない場合の扱いを
|
56
|
+
# 指定することはできません。
|
56
57
|
def fetch(key)
|
57
58
|
@assoc[key]
|
58
59
|
end
|
59
60
|
alias :[] :fetch
|
60
61
|
|
62
|
+
# Sets values associated with <code>key</code> to <code>value_list</code>.
|
63
|
+
# <code>value_list</code> is converted to a Multiset by Multiset.parse .
|
64
|
+
#
|
65
|
+
# Returns <code>value_list</code>.
|
66
|
+
#
|
61
67
|
# キー<code>key</code>に対応する値(複数存在しうる)を
|
62
68
|
# <code>value_list</code>で置き換えます。この際、
|
63
69
|
# <code>value_list</code>はMultiset.parseを用いてMultisetに変換されます。
|
64
70
|
#
|
65
71
|
# <code>value_list</code>を返します。
|
66
|
-
#
|
67
|
-
# Sets values associated with <code>key</code> to <code>value_list</code>.
|
68
|
-
# <code>value_list</code> is converted to a Multiset by Multiset.parse .
|
69
|
-
#
|
70
|
-
# Returns <code>value_list</code>.
|
71
72
|
def store(key, value_list)
|
72
73
|
if value_list.class == Multiset
|
73
74
|
@assoc[key] = value_list.dup
|
@@ -78,46 +79,44 @@ class Multimap
|
|
78
79
|
end
|
79
80
|
alias :[]= :store
|
80
81
|
|
81
|
-
# <code>self</code>が<code>other</code>と等しいかどうかを返します。
|
82
|
-
#
|
83
82
|
# Returns whether <code>self</code> is equal to <code>other</code>.
|
83
|
+
#
|
84
|
+
# <code>self</code>が<code>other</code>と等しいかどうかを返します。
|
84
85
|
def ==(other)
|
85
86
|
return false unless other.instance_of?(Multimap)
|
86
87
|
@assoc == other.to_hash
|
87
88
|
end
|
88
89
|
|
89
|
-
# <code>self</code
|
90
|
-
#
|
91
|
-
# その際、返されるハッシュにおいて値はすべてMultimap型となります。
|
90
|
+
# Converts <code>self</code> to a <code>Hash</code>
|
91
|
+
# whose values in the Hash are all multimaps.
|
92
92
|
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
# All values in the returned hash are multimaps.
|
93
|
+
# <code>self</code>を<code>Hash</code>に変換して返します。
|
94
|
+
# 返されるHash中において、値はすべてMultimap型となります。
|
96
95
|
def to_hash
|
97
96
|
@assoc.dup
|
98
97
|
end
|
99
98
|
|
100
|
-
# <code>self</code>に格納された要素をすべて削除します。
|
101
|
-
# <code>self</code>を返します。
|
102
|
-
#
|
103
99
|
# Removes all elements stored in <code>self</code>.
|
104
100
|
# Returns <code>self</code>.
|
101
|
+
#
|
102
|
+
# <code>self</code>に格納された要素をすべて削除します。
|
103
|
+
# <code>self</code>を返します。
|
105
104
|
def clear
|
106
105
|
@assoc.clear
|
107
106
|
end
|
108
107
|
|
109
|
-
# <code>self</code>の複製を生成して返します。
|
110
|
-
#
|
111
108
|
# Returns duplicated <code>self</code>.
|
109
|
+
#
|
110
|
+
# <code>self</code>の複製を生成して返します。
|
112
111
|
def dup
|
113
112
|
@assoc.to_multimap
|
114
113
|
end
|
115
114
|
|
116
|
-
# <code>self</code>の内容を<code>other</code>のものに置き換えます。
|
117
|
-
# <code>self</code>を返します。
|
118
|
-
#
|
119
115
|
# Replaces <code>self</code> by <code>other</code>.
|
120
116
|
# Returns <code>self</code>.
|
117
|
+
#
|
118
|
+
# <code>self</code>の内容を<code>other</code>のものに置き換えます。
|
119
|
+
# <code>self</code>を返します。
|
121
120
|
def replace(other)
|
122
121
|
@assoc.clear
|
123
122
|
other.each_pair_with do |key, a_value, count|
|
@@ -126,37 +125,37 @@ class Multimap
|
|
126
125
|
self
|
127
126
|
end
|
128
127
|
|
129
|
-
# <code>key</code>に割り当てられた全ての値を削除し、その値を
|
130
|
-
# Multisetとして返します。
|
131
|
-
#
|
132
128
|
# Deletes all values associated with <code>key</code>, and returns
|
133
129
|
# those values as a Multiset.
|
130
|
+
#
|
131
|
+
# <code>key</code>に割り当てられた全ての値を削除し、その値を
|
132
|
+
# Multisetとして返します。
|
134
133
|
def delete(key)
|
135
134
|
ret = @assoc[key]
|
136
135
|
@assoc.delete(key)
|
137
136
|
ret
|
138
137
|
end
|
139
138
|
|
140
|
-
# delete_if
|
139
|
+
# Same as Multimap#delete_if except that, rather than deleting key-value pairs in
|
140
|
+
# <code>self</code>, this generates a new Multimap with specified
|
141
|
+
# key-value pairs are deleted.
|
142
|
+
#
|
143
|
+
# Multimap#delete_ifと似ますが、<code>self</code>自身からはキーと値の組を
|
141
144
|
# 削除せず、要素が削除された結果の多重連想配列を新たに生成して
|
142
145
|
# 返します。
|
143
|
-
#
|
144
|
-
# Same as delete_if, but generates a new Multimap whose pairs of
|
145
|
-
# key and value are deleted, instead of deleting pairs in
|
146
|
-
# <code>self</code>.
|
147
146
|
def reject(&block) # :yields: key, single_value
|
148
147
|
ret = self.dup
|
149
148
|
ret.delete_if &block
|
150
149
|
ret
|
151
150
|
end
|
152
151
|
|
153
|
-
# ブロックに<code>self</code>のキーと値の組(値は1つ)を順次与え、
|
154
|
-
# 結果が真であった組をすべて削除します。
|
155
|
-
# <code>self</code>を返します。
|
156
|
-
#
|
157
152
|
# Gives all pairs of a key and single value in <code>self</code>
|
158
153
|
# to given block, and deletes that element if the block returns true.
|
159
154
|
# Returns <code>self</code>.
|
155
|
+
#
|
156
|
+
# ブロックに<code>self</code>のキーと値の組(値は1つ)を順次与え、
|
157
|
+
# 結果が真であった組をすべて削除します。
|
158
|
+
# <code>self</code>を返します。
|
160
159
|
def delete_if(&block) # :yields: key, single_value
|
161
160
|
cleanup
|
162
161
|
@assoc.each_pair do |key, value_list|
|
@@ -167,11 +166,11 @@ class Multimap
|
|
167
166
|
self
|
168
167
|
end
|
169
168
|
|
170
|
-
# delete_if
|
171
|
-
#
|
169
|
+
# Same as Multimap#delete_if except that <code>nil</code> is returned
|
170
|
+
# if no key-value pair is deleted.
|
172
171
|
#
|
173
|
-
#
|
174
|
-
#
|
172
|
+
# Multimap#delete_ifと似ますが、キーと値の組が1つも削除されなければ
|
173
|
+
# <code>nil</code>を返します。
|
175
174
|
def reject!(&block) # :yields: key, single_value
|
176
175
|
cleanup
|
177
176
|
ret = nil
|
@@ -183,24 +182,24 @@ class Multimap
|
|
183
182
|
ret
|
184
183
|
end
|
185
184
|
|
186
|
-
# reject
|
187
|
-
#
|
188
|
-
#
|
189
|
-
# Same as reject, but arguments given to block is the tuple of three:
|
190
|
-
# (key, one value associated with the key, numbers of that value
|
185
|
+
# Same as Multimap#reject except that arguments given to block is the following three:
|
186
|
+
# (key, single value associated with the key, numbers of that value
|
191
187
|
# associated with the key).
|
188
|
+
#
|
189
|
+
# Multimap#rejectと似ますが、ブロックへの引数が(キー、キーに割り当てられた値、
|
190
|
+
# その値がキーに割り当てられている個数)の3つの組で与えられます。
|
192
191
|
def reject_with(&block) # :yields: key, a_value, count
|
193
192
|
ret = self.dup
|
194
193
|
ret.delete_with &block
|
195
194
|
ret
|
196
195
|
end
|
197
196
|
|
198
|
-
# delete_if
|
199
|
-
#
|
200
|
-
#
|
201
|
-
# Same as delete_if, but arguments given to block is the tuple of three:
|
202
|
-
# (key, one value associated with the key, numbers of that value
|
197
|
+
# Same as Multimap#delete_if except that arguments given to block is the following three:
|
198
|
+
# (key, single value associated with the key, numbers of that value
|
203
199
|
# associated with the key).
|
200
|
+
#
|
201
|
+
# Multimap#delete_ifと同じですが、ブロックへの引数が(キー、キーに割り当てられた値、
|
202
|
+
# その値がキーに割り当てられている個数)の3つの組で与えられます。
|
204
203
|
def delete_with(&block) # :yields: key, a_value, count
|
205
204
|
cleanup
|
206
205
|
@assoc.each_pair do |key, value_list|
|
@@ -211,11 +210,11 @@ class Multimap
|
|
211
210
|
self
|
212
211
|
end
|
213
212
|
|
214
|
-
# <code>self</code>のすべてのキーと値の組について繰り返します。
|
215
|
-
# <code>self</code>を返します。
|
216
|
-
#
|
217
213
|
# Iterates for each pair of a key and a value in <code>self</code>.
|
218
214
|
# Returns <code>self</code>.
|
215
|
+
#
|
216
|
+
# <code>self</code>のすべてのキーと値の組について繰り返します。
|
217
|
+
# <code>self</code>を返します。
|
219
218
|
def each_pair
|
220
219
|
if block_given?
|
221
220
|
cleanup
|
@@ -231,14 +230,14 @@ class Multimap
|
|
231
230
|
end
|
232
231
|
alias :each :each_pair
|
233
232
|
|
233
|
+
# Iterates for each pair of a key and a value in <code>self</code>,
|
234
|
+
# giving the following three to block:
|
235
|
+
# (key, single value associated with the key, numbers of that value
|
236
|
+
# associated with the key). Returns <code>self</code>.
|
237
|
+
#
|
234
238
|
# <code>self</code>のすべてのキーと値の組について、
|
235
239
|
# ブロックに(キー、キーに割り当てられた値、その値が割り当てられた数)
|
236
240
|
# の組を与えながら繰り返します。<code>self</code>を返します。
|
237
|
-
#
|
238
|
-
# Iterates for each pair of a key and a value in <code>self</code>,
|
239
|
-
# giving the tuple of three to block:
|
240
|
-
# (key, one value associated with the key, numbers of that value
|
241
|
-
# associated with the key). Returns <code>self</code>.
|
242
241
|
def each_pair_with
|
243
242
|
if block_given?
|
244
243
|
cleanup
|
@@ -253,32 +252,36 @@ class Multimap
|
|
253
252
|
end
|
254
253
|
end
|
255
254
|
|
256
|
-
# <code>self</code>のすべてのキーと、そのキーに割り当てられた
|
257
|
-
# すべての値(Multisetで与えられる)の組について繰り返します。
|
258
|
-
# <code>self</code>を返します。
|
259
|
-
#
|
260
255
|
# Iterates for each pair of a key and all values associated with the key
|
261
256
|
# (list of values is given as Multiset) in <code>self</code>.
|
262
257
|
# Returns <code>self</code>.
|
258
|
+
#
|
259
|
+
# <code>self</code>のすべてのキーと、そのキーに割り当てられた
|
260
|
+
# すべての値(Multisetで与えられる)の組について繰り返します。
|
261
|
+
# <code>self</code>を返します。
|
263
262
|
def each_pair_list(&block) # :yields: key, value_list
|
264
263
|
cleanup
|
265
264
|
@assoc.each_pair &block
|
266
265
|
end
|
267
266
|
|
268
267
|
|
268
|
+
# Iterates for each key in <code>self</code>. Returns <code>self</code>.
|
269
|
+
#
|
269
270
|
# <code>self</code>のすべてのキーについて繰り返します。
|
270
271
|
# <code>self</code>を返します。
|
271
|
-
#
|
272
|
-
# Iterates for each key in <code>self</code>. Returns <code>self</code>.
|
273
272
|
def each_key(&block) # :yields: key
|
274
|
-
|
275
|
-
|
273
|
+
if block_given?
|
274
|
+
cleanup
|
275
|
+
@assoc.each_key &block
|
276
|
+
else
|
277
|
+
Enumerator.new(self, :each_key)
|
278
|
+
end
|
276
279
|
end
|
277
280
|
|
281
|
+
# Iterates for each value in <code>self</code>. Returns <code>self</code>.
|
282
|
+
#
|
278
283
|
# <code>self</code>のすべての値について繰り返します。
|
279
284
|
# <code>self</code>を返します。
|
280
|
-
#
|
281
|
-
# Iterates for each value in <code>self</code>. Returns <code>self</code>.
|
282
285
|
def each_value(&block) # :yields: single_value
|
283
286
|
if block_given?
|
284
287
|
cleanup
|
@@ -291,18 +294,18 @@ class Multimap
|
|
291
294
|
end
|
292
295
|
end
|
293
296
|
|
294
|
-
# <code>self</code>のすべてのキーを、配列として返します。
|
295
|
-
#
|
296
297
|
# Returns an array in which keys in <code>self</code> are stored.
|
298
|
+
#
|
299
|
+
# <code>self</code>のすべてのキーを、配列として返します。
|
297
300
|
def keys
|
298
301
|
cleanup
|
299
302
|
@assoc.keys
|
300
303
|
end
|
301
304
|
|
302
305
|
|
303
|
-
# <code>self</code>のすべての値を、Multisetとして返します。
|
304
|
-
#
|
305
306
|
# Returns a Multiset in which values in <code>self</code> are stored.
|
307
|
+
#
|
308
|
+
# <code>self</code>のすべての値を、Multisetとして返します。
|
306
309
|
def values
|
307
310
|
cleanup
|
308
311
|
ret = Multiset.new
|
@@ -312,17 +315,17 @@ class Multimap
|
|
312
315
|
ret
|
313
316
|
end
|
314
317
|
|
315
|
-
# <code>self</code>に要素がないかどうかを返します。
|
316
|
-
#
|
317
318
|
# Returns whether <code>self</code> has no element.
|
319
|
+
#
|
320
|
+
# <code>self</code>に要素がないかどうかを返します。
|
318
321
|
def empty?
|
319
322
|
cleanup
|
320
323
|
@assoc.empty?
|
321
324
|
end
|
322
325
|
|
323
|
-
# <code>self</code>にキー<code>key</code>かあるかどうかを返します。
|
324
|
-
#
|
325
326
|
# Returns whether <code>self</code> has a key <code>key</code>.
|
327
|
+
#
|
328
|
+
# <code>self</code>にキー<code>key</code>かあるかどうかを返します。
|
326
329
|
def has_key?(key)
|
327
330
|
cleanup
|
328
331
|
@assoc.has_key?(key)
|
@@ -331,23 +334,23 @@ class Multimap
|
|
331
334
|
alias :include? :has_key?
|
332
335
|
alias :member? :has_key?
|
333
336
|
|
334
|
-
# <code>self</code>に値<code>value</code>かあるかどうかを返します。
|
335
|
-
#
|
336
337
|
# Returns whether <code>self</code> has a value <code>value</code>.
|
338
|
+
#
|
339
|
+
# <code>self</code>に値<code>value</code>かあるかどうかを返します。
|
337
340
|
def has_value?(value)
|
338
341
|
self.values.items.include?(value)
|
339
342
|
end
|
340
343
|
alias :value? :has_value?
|
341
344
|
|
342
|
-
# <code>self</code>から値が<code>value</code>であるような要素を
|
343
|
-
# 検索し、それに対応するキーを返します。該当するキーが複数存在する場合、
|
344
|
-
# そのうちの1つを返します。該当するキーが存在しなければ
|
345
|
-
# <code>nil</code>を返します。
|
346
|
-
#
|
347
345
|
# Search a pair of key and value from <code>self</code> such that
|
348
346
|
# the value is equal to the argument <code>value</code>.
|
349
347
|
# If two or keys are matched, returns one of them.
|
350
348
|
# If no key is matched, returns nil.
|
349
|
+
#
|
350
|
+
# <code>self</code>から値が<code>value</code>であるような要素を
|
351
|
+
# 検索し、それに対応するキーを返します。該当するキーが複数存在する場合、
|
352
|
+
# そのうちの1つを返します。該当するキーが存在しなければ
|
353
|
+
# <code>nil</code>を返します。
|
351
354
|
def key(value)
|
352
355
|
self.each_pair_with do |key, a_value, count|
|
353
356
|
return key if value == a_value
|
@@ -356,28 +359,28 @@ class Multimap
|
|
356
359
|
end
|
357
360
|
alias :index :key
|
358
361
|
|
362
|
+
# Retrieves values (instances of Multiset) of <code>self</code>
|
363
|
+
# associated with <code>key_list</code>, and returns those values
|
364
|
+
# as an array. i.e. returns an array whose elements are multisets.
|
365
|
+
#
|
359
366
|
# <code>self</code>から<code>key_list</code>の各キーに対応する値
|
360
367
|
# (Multiset型)を取り出し、それらを配列として返します。
|
361
368
|
# すなわち、Multisetを要素とする配列を返します。
|
362
|
-
#
|
363
|
-
# Gets values (instances of Multiset) of <code>self</code>
|
364
|
-
# associated with <code>key_list</code>, and returns those values
|
365
|
-
# as an array. i.e. returns an array whose elements are multisets.
|
366
369
|
def values_at(*key_list)
|
367
370
|
key_list.map{ |key| self[key] }
|
368
371
|
end
|
369
372
|
alias :indexes :values_at
|
370
373
|
alias :indices :values_at
|
371
374
|
|
372
|
-
# <code>self</code>のキーと値を入れ替えたMultimapを返します。
|
373
|
-
# 例えばキー:aに対応する値が2つの:xと1つの:yであれば、変換結果は
|
374
|
-
# キー:xに:aが2つ、キー:yに:aが1つ対応するMultimapです。
|
375
|
-
#
|
376
375
|
# Returns a Multimap whose keys are values in <code>self</code>, and
|
377
376
|
# values are keys in <code>self</code>. For example,
|
378
377
|
# If <code>self</code> has a key :a associated with two :x and one :y,
|
379
378
|
# returned multimap has two keys :x and :y, and their values are
|
380
379
|
# two :a and one :a respectively.
|
380
|
+
#
|
381
|
+
# <code>self</code>のキーと値を入れ替えたMultimapを返します。
|
382
|
+
# 例えばキー:aに対応する値が2つの:xと1つの:yであれば、変換結果は
|
383
|
+
# キー:xに:aが2つ、キー:yに:aが1つ対応するMultimapです。
|
381
384
|
def invert
|
382
385
|
ret = Multimap.new
|
383
386
|
self.each_pair_with do |key, a_value, count|
|
@@ -386,9 +389,9 @@ class Multimap
|
|
386
389
|
ret
|
387
390
|
end
|
388
391
|
|
389
|
-
# <code>self</code>に含まれている要素数を返します。
|
390
|
-
#
|
391
392
|
# Returns number of all elements in <code>self</code>.
|
393
|
+
#
|
394
|
+
# <code>self</code>に含まれている要素数を返します。
|
392
395
|
def size
|
393
396
|
ret = 0
|
394
397
|
self.each_pair_with{ |key, a_value, count| ret += count }
|
@@ -396,11 +399,11 @@ class Multimap
|
|
396
399
|
end
|
397
400
|
alias :length :size
|
398
401
|
|
399
|
-
# <code>self</code>に<code>other</code>の要素を追加します。
|
400
|
-
# <code>self</code>を返します。
|
401
|
-
#
|
402
402
|
# Add elements in <code>other</code> to <code>self</code>.
|
403
403
|
# Returns <code>self</code>.
|
404
|
+
#
|
405
|
+
# <code>self</code>に<code>other</code>の要素を追加します。
|
406
|
+
# <code>self</code>を返します。
|
404
407
|
def merge!(other)
|
405
408
|
other.each_pair_with do |key, a_value, count|
|
406
409
|
self[key].add a_value, count
|
@@ -408,9 +411,9 @@ class Multimap
|
|
408
411
|
self
|
409
412
|
end
|
410
413
|
|
411
|
-
# <code>self</code>と<code>other</code>の要素を合わせた多重集合を返します。
|
412
|
-
#
|
413
414
|
# Returns merged multiset of <code>self</code> and <code>other</code>.
|
415
|
+
#
|
416
|
+
# <code>self</code>と<code>other</code>の要素を合わせた多重集合を返します。
|
414
417
|
def merge(other)
|
415
418
|
ret = self.dup
|
416
419
|
ret.merge! other
|
@@ -453,16 +456,6 @@ class Multimap
|
|
453
456
|
end
|
454
457
|
|
455
458
|
class Hash
|
456
|
-
# <code>self</code>を多重連想配列に変換し、その結果を返します。
|
457
|
-
# 新しく生成される多重連想配列においてキーに割り当てられる値は、
|
458
|
-
# <code>self</code>におけるキーの値をMultiset.parseによって多重集合に
|
459
|
-
# 変換したものとなります。
|
460
|
-
#
|
461
|
-
# (例)キー<code>:a</code>には<code>:x</code>と<code>:y</code>が1個ずつ、
|
462
|
-
# キー<code>:b</code>には<code>:x</code>が2個割り当てられた多重連想配列
|
463
|
-
#
|
464
|
-
# <code>{:a => [:x, :y], :b => [:x, :x]}.to_multimap</code>
|
465
|
-
#
|
466
459
|
# Generates multiset from <code>self</code>.
|
467
460
|
# In generated multiset, values associated with a key are defined by
|
468
461
|
# the result of Multiset.parse(values_in_<code>self</code>) .
|
@@ -472,19 +465,29 @@ class Hash
|
|
472
465
|
# key <code>:b</code> is associated with values two <code>:x</code>
|
473
466
|
#
|
474
467
|
# <code>{:a => [:x, :y], :b => [:x, :x]}.to_multimap</code>
|
468
|
+
#
|
469
|
+
# <code>self</code>を多重連想配列に変換し、その結果を返します。
|
470
|
+
# 新しく生成される多重連想配列においてキーに割り当てられる値は、
|
471
|
+
# <code>self</code>におけるキーの値をMultiset.parseによって多重集合に
|
472
|
+
# 変換したものとなります。
|
473
|
+
#
|
474
|
+
# (例)キー<code>:a</code>には<code>:x</code>と<code>:y</code>が1個ずつ、
|
475
|
+
# キー<code>:b</code>には<code>:x</code>が2個割り当てられた多重連想配列
|
476
|
+
#
|
477
|
+
# <code>{:a => [:x, :y], :b => [:x, :x]}.to_multimap</code>
|
475
478
|
def to_multimap
|
476
479
|
ret = Multimap.new
|
477
480
|
self.each_pair{ |key, val| ret[key] = val }
|
478
481
|
ret
|
479
482
|
end
|
480
483
|
|
481
|
-
# <code>self</code>を多重連想配列に変換し、その結果を返します。
|
482
|
-
# 新しく生成される多重連想配列においてキーに割り当てられる値は、
|
483
|
-
# <code>self</code>に含まれる1要素のみです。
|
484
|
-
#
|
485
484
|
# Generates multiset from <code>self</code>.
|
486
485
|
# In generated multiset, only one value is associated with a key
|
487
486
|
# (value in <code>self</code>).
|
487
|
+
#
|
488
|
+
# <code>self</code>を多重連想配列に変換し、その結果を返します。
|
489
|
+
# 新しく生成される多重連想配列においてキーに割り当てられる値は、
|
490
|
+
# <code>self</code>に含まれる1要素のみです。
|
488
491
|
def multimap
|
489
492
|
ret = Multimap.new
|
490
493
|
self.each_pair{ |key, val| ret[key] = Multiset[val] }
|