From: Michael Schmarck Date: 2008-01-25T00:04:56+09:00 Subject: Changing an array data structure Hello. I already asked about how I'd best re-order a datastructure. But thinking about, I changed my mind; instead of the hash approach I've shown in , I now think I might use arrays instead. Reason: The order in which something is inserted and later fetched is important to me. With Hashes in 1.8, this cannot easily be done out-of-the-box, can it? Anyway - I'm now looking for a way to change the following arry: timing = [ ["Performance Test of Item Access using Lists", [ [["Plants", 100], ["Customers", 50], ["Total", 150]], [["Plants", 85], ["Customers", 60], ["Total", 145]], [["Plants", 111], ["Customers", 77], ["Total", 188]] ]], ["Performance Test of Item Access using Advance Item Search", [ [["Work List", 17], ["Bookmarks", 30], ["Total", 42]], [["Work List", 10], ["Bookmarks", 33], ["Total", 50]], [["Work List", 22], ["Bookmarks", 27], ["Total", 99]] ]] ] # This should become: timing_reordered = [ ["Performance Test of Item Access using Lists", [ ["Plants", [100, 85, 111]], ["Customers", [50, 60, 77]], ["Total", [150, 145, 188]] ]], ["Performance Test of Item Access using Advance Item Search", [ ["Work List", [17, 10, 22]], ["Bookmarks", [30, 33, 27]], ["Total", [42, 50, 99]] ]] ] It very much resembles the datastructure shown in the hash approach. That's only natural, if you take into consideration how the data is generated. To do that, I'm running a method 3 (or more) times; these methods generate the "Performance Test of Item Access using Lists" and "Performance Test of Item Access using Advance Item Search" data. These methods generate data; data items for Plants, Customers and so on. But for reporting, it's best for me, if all the eg. Plants results are "grouped together". Actually, I only need the innermost arrays, ie. [100, 85, 111], [50, 60, 77], .... These arrays should be concated, so that I've only got one long array, starting with: [100, 85, 111, 50, 60, 77, ...]. Well - how would I reorder the array best? I tried: timing.each { |test| ... } But actually, I already fail to go on there. Now "test" is an array. When I access test[0], I get the "category labels" ("Performance Test of ....") and with test[1], I get the entries. Ie.: Plants 100 Customers 50 Total 150 If I add another "each loop" into that existing loop, I don't get what I'd expect. I tried: timing.each { |test| test[1].each { |test_values| puts test_values[0] } } Now I'd expect to get Plants, Customers, Total, Work Lists, Bookmarks, Total. But I get: Plants 100 Plants 85 Plants 111 Work List 17 Work List 10 Work List 22 So I only get the 1st "column" of the input data. Why's that? And how would I do that correctly, as that's obviously not the right way to go? Thanks again, Michael