M
Michael Schmarck
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
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