Class: ALib::OrderedHash
- Inherits:
-
Hash
- Object
- Hash
- ALib::OrderedHash
- Defined in:
- lib/alib.rb,
lib/alib-0.3.1.rb
Overview
AUTHOR
jan molic /mig/at/1984/dot/cz/
DESCRIPTION
Hash with preserved order and some array-like extensions
Public domain.
THANKS
Andrew Johnson for his suggestions and fixes of Hash[],
merge, to_a, inspect and shift
Direct Known Subclasses
Instance Attribute Summary collapse
-
#order ⇒ Object
–{{{.
Class Method Summary collapse
-
.[](*args) ⇒ Object
–{{{.
Instance Method Summary collapse
- #==(hsh2) ⇒ Object
-
#class ⇒ Object
–}}}.
-
#clear ⇒ Object
–}}}.
-
#delete(key) ⇒ Object
–}}}.
- #delete_if ⇒ Object
-
#each ⇒ Object
(also: #each_pair)
–}}}.
-
#each_key ⇒ Object
–}}}.
-
#each_value ⇒ Object
–}}}.
-
#initialize(*a, &b) ⇒ OrderedHash
constructor
end.
-
#inspect ⇒ Object
–}}}.
-
#invert ⇒ Object
–}}}.
-
#keys ⇒ Object
–}}}.
- #merge(hsh2) ⇒ Object
-
#orig_store ⇒ Object
–}}}.
-
#pop ⇒ Object
–}}}.
-
#push(k, v) ⇒ Object
–}}}.
-
#reject(&block) ⇒ Object
–}}}.
-
#reject!(&block) ⇒ Object
–}}}.
-
#replace(hsh2) ⇒ Object
–}}}.
-
#select ⇒ Object
–}}}.
-
#shift ⇒ Object
–}}}.
- #store(a, b) ⇒ Object (also: #[]=)
-
#store_only(a, b) ⇒ Object
–}}}.
-
#to_a ⇒ Object
–}}}.
-
#to_s ⇒ Object
–}}}.
-
#unshift(k, v) ⇒ Object
–}}}.
-
#update(hsh2) ⇒ Object
(also: #merge!)
–}}}.
-
#values ⇒ Object
–}}}.
Constructor Details
#initialize(*a, &b) ⇒ OrderedHash
end
1314 1315 1316 1317 1318 1319 |
# File 'lib/alib.rb', line 1314 def initialize(*a, &b) #--{{{ super @order = [] #--}}} end |
Instance Attribute Details
#order ⇒ Object
–{{{
1290 1291 1292 |
# File 'lib/alib.rb', line 1290 def order @order end |
Class Method Details
.[](*args) ⇒ Object
–{{{
1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 |
# File 'lib/alib.rb', line 1294 def [] *args #--{{{ hsh = OrderedHash.new if Hash === args[0] hsh.replace args[0] elsif (args.size % 2) != 0 raise ArgumentError, "odd number of elements for Hash" else hsh[args.shift] = args.shift while args.size > 0 end hsh #--}}} end |
Instance Method Details
#==(hsh2) ⇒ Object
1333 1334 1335 1336 1337 1338 |
# File 'lib/alib.rb', line 1333 def == hsh2 #--{{{ return false if @order != hsh2.order super hsh2 #--}}} end |
#class ⇒ Object
–}}}
1486 1487 1488 1489 1490 |
# File 'lib/alib.rb', line 1486 def class #--{{{ Hash #--}}} end |
#clear ⇒ Object
–}}}
1339 1340 1341 1342 1343 1344 |
# File 'lib/alib.rb', line 1339 def clear #--{{{ @order = [] super #--}}} end |
#delete(key) ⇒ Object
–}}}
1345 1346 1347 1348 1349 1350 |
# File 'lib/alib.rb', line 1345 def delete key #--{{{ @order.delete key super #--}}} end |
#delete_if ⇒ Object
1370 1371 1372 1373 1374 1375 1376 1377 |
# File 'lib/alib.rb', line 1370 def delete_if #--{{{ @order.clone.each { |k| delete k if yield } self #--}}} end |
#each ⇒ Object Also known as: each_pair
–}}}
1363 1364 1365 1366 1367 1368 |
# File 'lib/alib.rb', line 1363 def each #--{{{ @order.each { |k| yield k,self[k] } self #--}}} end |
#each_key ⇒ Object
–}}}
1351 1352 1353 1354 1355 1356 |
# File 'lib/alib.rb', line 1351 def each_key #--{{{ @order.each { |k| yield k } self #--}}} end |
#each_value ⇒ Object
–}}}
1357 1358 1359 1360 1361 1362 |
# File 'lib/alib.rb', line 1357 def each_value #--{{{ @order.each { |k| yield self[k] } self #--}}} end |
#inspect ⇒ Object
–}}}
1460 1461 1462 1463 1464 1465 1466 |
# File 'lib/alib.rb', line 1460 def inspect #--{{{ ary = [] each {|k,v| ary << k.inspect + "=>" + v.inspect} '{' + ary.join(", ") + '}' #--}}} end |
#invert ⇒ Object
–}}}
1390 1391 1392 1393 1394 1395 1396 |
# File 'lib/alib.rb', line 1390 def invert #--{{{ hsh2 = Hash.new @order.each { |k| hsh2[self[k]] = k } hsh2 #--}}} end |
#keys ⇒ Object
–}}}
1385 1386 1387 1388 1389 |
# File 'lib/alib.rb', line 1385 def keys #--{{{ @order #--}}} end |
#merge(hsh2) ⇒ Object
1474 1475 1476 1477 1478 |
# File 'lib/alib.rb', line 1474 def merge hsh2 #--{{{ self.dup update(hsh2) #--}}} end |
#orig_store ⇒ Object
–}}}
1325 1326 1327 1328 1329 1330 |
# File 'lib/alib.rb', line 1325 def store a,b #--{{{ @order.push a unless has_key? a super a,b #--}}} end |
#pop ⇒ Object
–}}}
1442 1443 1444 1445 1446 1447 |
# File 'lib/alib.rb', line 1442 def pop #--{{{ key = @order.last key ? [key,delete(key)] : nil #--}}} end |
#push(k, v) ⇒ Object
–}}}
1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 |
# File 'lib/alib.rb', line 1431 def push k,v #--{{{ unless self.include? k @order.push k orig_store(k,v) true else false end #--}}} end |
#reject(&block) ⇒ Object
–}}}
1397 1398 1399 1400 1401 |
# File 'lib/alib.rb', line 1397 def reject &block #--{{{ self.dup.delete_if &block #--}}} end |
#reject!(&block) ⇒ Object
–}}}
1402 1403 1404 1405 1406 1407 |
# File 'lib/alib.rb', line 1402 def reject! &block #--{{{ hsh2 = reject &block self == hsh2 ? nil : hsh2 #--}}} end |
#replace(hsh2) ⇒ Object
–}}}
1408 1409 1410 1411 1412 1413 |
# File 'lib/alib.rb', line 1408 def replace hsh2 #--{{{ @order = hsh2.keys super hsh2 #--}}} end |
#select ⇒ Object
–}}}
1479 1480 1481 1482 1483 1484 1485 |
# File 'lib/alib.rb', line 1479 def select #--{{{ ary = [] each { |k,v| ary << [k,v] if yield k,v } ary #--}}} end |
#shift ⇒ Object
–}}}
1414 1415 1416 1417 1418 1419 |
# File 'lib/alib.rb', line 1414 def shift #--{{{ key = @order.first key ? [key,delete(key)] : super #--}}} end |
#store(a, b) ⇒ Object Also known as: []=
1326 1327 1328 1329 1330 1331 |
# File 'lib/alib.rb', line 1326 def store a,b #--{{{ @order.push a unless has_key? a super a,b #--}}} end |
#store_only(a, b) ⇒ Object
–}}}
1320 1321 1322 1323 1324 |
# File 'lib/alib.rb', line 1320 def store_only a,b #--{{{ store a,b #--}}} end |
#to_a ⇒ Object
–}}}
1448 1449 1450 1451 1452 1453 1454 |
# File 'lib/alib.rb', line 1448 def to_a #--{{{ ary = [] each { |k,v| ary << [k,v] } ary #--}}} end |
#to_s ⇒ Object
–}}}
1455 1456 1457 1458 1459 |
# File 'lib/alib.rb', line 1455 def to_s #--{{{ self.to_a.to_s #--}}} end |
#unshift(k, v) ⇒ Object
–}}}
1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 |
# File 'lib/alib.rb', line 1420 def unshift k,v #--{{{ unless self.include? k @order.unshift k orig_store(k,v) true else false end #--}}} end |
#update(hsh2) ⇒ Object Also known as: merge!
–}}}
1467 1468 1469 1470 1471 1472 |
# File 'lib/alib.rb', line 1467 def update hsh2 #--{{{ hsh2.each { |k,v| self[k] = v } self #--}}} end |
#values ⇒ Object
–}}}
1378 1379 1380 1381 1382 1383 1384 |
# File 'lib/alib.rb', line 1378 def values #--{{{ ary = [] @order.each { |k| ary.push self[k] } ary #--}}} end |