Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
October 22, 2014 Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Just curious if this is possible. I have some data on different countries that i have stored in a multidimensional array called data[][]. What I want to do is sort data[][] by population which happens to be stored in data[i][4] where i is the index to iterate from country to country. I would like something like this: sort!("a>b")(data[][4]); Anybody have any suggestions? |
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to neal | On Wednesday, 22 October 2014 at 00:32:56 UTC, neal wrote:
> Just curious if this is possible. I have some data on different countries that i have stored in a multidimensional array called data[][]. What I want to do is sort data[][] by population which happens to be stored in data[i][4] where i is the index to iterate from country to country.
>
> I would like something like this:
>
> sort!("a>b")(data[][4]);
>
> Anybody have any suggestions?
More like this:
sort!(a.country > b.country)(data[][4]);
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joel | On Wednesday, 22 October 2014 at 00:36:22 UTC, Joel wrote:
> On Wednesday, 22 October 2014 at 00:32:56 UTC, neal wrote:
>> Just curious if this is possible. I have some data on different countries that i have stored in a multidimensional array called data[][]. What I want to do is sort data[][] by population which happens to be stored in data[i][4] where i is the index to iterate from country to country.
>>
>> I would like something like this:
>>
>> sort!("a>b")(data[][4]);
>>
>> Anybody have any suggestions?
>
> More like this:
> sort!(a.country > b.country)(data[][4]);
Oops, forgot the quotes: sort!("a.country > b.country")(data[][4]);
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to neal | neal:
> Anybody have any suggestions?
Something like this, perhaps?
data.sort!q{ a[4] > b[4] };
Bye,
bearophile
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Wednesday, 22 October 2014 at 01:02:17 UTC, bearophile wrote:
> neal:
>
>> Anybody have any suggestions?
>
> Something like this, perhaps?
>
> data.sort!q{ a[4] > b[4] };
>
> Bye,
> bearophile
Hmmm.. Im getting some interesting results here. So when i put
all of the populations in an area and used this code:
sort!("a>b")(population);
writeln("Top 5 population in 1993: ");
for(int i = 0; i < 5;i++)
writeln(population[i]);
I get:
Top 5 population in 1993:
1189550675
916529257
264493898
191658591
156810428
The problem there is that i lose the country that the population
is associated with (the top one being China).
When I run your code:
data.sort!q{ a[4] > b[4] };
for(int i = 0; i < 5; i++)
writeln(data[][]);
I get this result for the top 5:
["Portugal", "1593140", "-668536", "1993", "9993683", "8"]
["Anguilla", "114", "-536", "1993", "9865", "10"]
["Malawi", "31745", "-25289", "1993", "9862531", "6"]
["Grenada", "2274", "-4890", "1993", "96908", "2"]
["Burkina Faso", "22613", "-38738", "1993", "9688261", "6"]
Notice that the top populations arent correct.
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to neal | On Wednesday, 22 October 2014 at 01:58:19 UTC, neal wrote:
> On Wednesday, 22 October 2014 at 01:02:17 UTC, bearophile wrote:
>> neal:
>>
>>> Anybody have any suggestions?
>>
>> Something like this, perhaps?
>>
>> data.sort!q{ a[4] > b[4] };
>>
>> Bye,
>> bearophile
>
> Hmmm.. Im getting some interesting results here. So when i put
> all of the populations in an area and used this code:
>
> sort!("a>b")(population);
> writeln("Top 5 population in 1993: ");
> for(int i = 0; i < 5;i++)
> writeln(population[i]);
>
>
> I get:
>
> Top 5 population in 1993:
> 1189550675
> 916529257
> 264493898
> 191658591
> 156810428
>
>
> The problem there is that i lose the country that the population
> is associated with (the top one being China).
>
> When I run your code:
>
> data.sort!q{ a[4] > b[4] };
> for(int i = 0; i < 5; i++)
> writeln(data[][]);
>
> I get this result for the top 5:
>
> ["Portugal", "1593140", "-668536", "1993", "9993683", "8"]
> ["Anguilla", "114", "-536", "1993", "9865", "10"]
> ["Malawi", "31745", "-25289", "1993", "9862531", "6"]
> ["Grenada", "2274", "-4890", "1993", "96908", "2"]
> ["Burkina Faso", "22613", "-38738", "1993", "9688261", "6"]
>
>
> Notice that the top populations arent correct.
Wow sorry I just realized my mistake. the array is an array of strings!
data.sort!q{ to!int(a[4]) > to!int(b[4]) };
This code fixes my problem! Thanks for the quick responses guys. you rock!
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to neal | neal:
> data.sort!q{ to!int(a[4]) > to!int(b[4]) };
>
> This code fixes my problem! Thanks for the quick responses guys. you rock!
That converts string->int many more than once for each string. So if memory is not a problem, consider using a decorate-sort-undecorate pattern:
data.schwartzSort!q{ a[4].to!int };
Bye,
bearophile
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Wednesday, 22 October 2014 at 07:38:01 UTC, bearophile wrote:
> neal:
>
>> data.sort!q{ to!int(a[4]) > to!int(b[4]) };
>>
>> This code fixes my problem! Thanks for the quick responses guys. you rock!
>
> That converts string->int many more than once for each string. So if memory is not a problem, consider using a decorate-sort-undecorate pattern:
>
> data.schwartzSort!q{ a[4].to!int };
>
> Bye,
> bearophile
Interesting! Thank you. Memory isn't a problem but I would still
like to learn how to write more efficient programs. If i posted
my code would you be able to give me some advice?
|
October 22, 2014 Re: Sorting array of string arrays by an element in the string array | ||||
---|---|---|---|---|
| ||||
Posted in reply to Neal | Neal: > Interesting! Thank you. Memory isn't a problem Unfortunately currently the sort-decorate-undercorate in Phobos is not very fast. > but I would still > like to learn how to write more efficient programs. If i posted > my code would you be able to give me some advice? There is far more than just me around here. If you post code, someone usually can write come comment. Bye, bearophile |
Copyright © 1999-2021 by the D Language Foundation