Thread overview | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
October 28, 2020 Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
per the D sample wc2.d.... size_t[string] dictionary; <-is printed by... ..... foreach (word1; dictionary.keys.sort) writef ....etc I want to print the dictionary sorted by value not key. I can write an algorithm but is there a library method(s) I can use to iterate through the array sorted by decreasing values? Thanks for your time. |
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | On Wednesday, 28 October 2020 at 15:15:40 UTC, Paul wrote: > per the D sample wc2.d.... > size_t[string] dictionary; <-is printed by... > ..... > foreach (word1; dictionary.keys.sort) writef ....etc > > I want to print the dictionary sorted by value not key. I can write an algorithm but is there a library method(s) I can use to iterate through the array sorted by decreasing values? > > Thanks for your time. import std.array, std.algorithm; auto sorted = dictionary.byPair.array.sort!((a, b) => a.value < b.value) |
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | On Wed, Oct 28, 2020 at 03:15:40PM +0000, Paul via Digitalmars-d-learn wrote: > per the D sample wc2.d.... > size_t[string] dictionary; <-is printed by... > ..... > foreach (word1; dictionary.keys.sort) writef ....etc > > I want to print the dictionary sorted by value not key. I can write an algorithm but is there a library method(s) I can use to iterate through the array sorted by decreasing values? [...] Just use a different sorting predicate: import std; void main() { int[string] aa = [ "abc": 321, "def": 234, "ghi": 524, "jkl": 310, "mno": 110, "pqr": 910, ]; foreach (key; aa.keys.sort!((a,b) => aa[a] < aa[b])) { writeln(key); } } T -- Curiosity kills the cat. Moral: don't be the cat. |
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Wednesday, 28 October 2020 at 15:25:26 UTC, Paul Backus wrote:
> On Wednesday, 28 October 2020 at 15:15:40 UTC, Paul wrote:
>> per the D sample wc2.d....
>> size_t[string] dictionary; <-is printed by...
>> .....
>> foreach (word1; dictionary.keys.sort) writef ....etc
>>
>> I want to print the dictionary sorted by value not key. I can write an algorithm but is there a library method(s) I can use to iterate through the array sorted by decreasing values?
>>
>> Thanks for your time.
>
> import std.array, std.algorithm;
>
> auto sorted = dictionary.byPair.array.sort!((a, b) => a.value < b.value)
Thanks Paul
|
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | Thanks Teoh |
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | On Wednesday, 28 October 2020 at 15:15:40 UTC, Paul wrote:
> per the D sample wc2.d....
> size_t[string] dictionary; <-is printed by...
> .....
> foreach (word1; dictionary.keys.sort) writef ....etc
>
> I want to print the dictionary sorted by value not key. I can write an algorithm but is there a library method(s) I can use to iterate through the array sorted by decreasing values?
>
> Thanks for your time.
Have you tries .values() function? dictionary.values.sort()
|
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Wednesday, 28 October 2020 at 15:25:26 UTC, Paul Backus wrote:
>
> auto sorted = dictionary.byPair.array.sort!((a, b) => a.value < b.value)
It seems this method produces a ?sorted array of tuples?
[..Tuple!(string, "key", uint, "value")("Program", 74),
Tuple!(string, "key", uint, "value")("rd", 74)..]
I guess I would just have to iterate through the tuples.
|
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to aberba | On Wednesday, 28 October 2020 at 15:40:23 UTC, aberba wrote: > Have you tries .values() function? dictionary.values.sort() Thanks aberba. Yes, that was my first attempt! If my terminology is correct that gives me a "range" of sorted VALUES. I think I can't "iterate"(foreach) through an array of VALUE[KEY] using the VALUE. I can only iterate over the KEYS...maybe? If my array is of type int[string] I can do: foreach(word-STRING, range-of-STRINGS) writeln(dictionary[word-STRING]); but not: foreach(value-INT, range-of-VALUES) writeln(dictionary[value-INT]<- wrong type); |
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On Wednesday, 28 October 2020 at 15:27:04 UTC, H. S. Teoh wrote:
> foreach (key; aa.keys.sort!((a,b) => aa[a] < aa[b])) {
> writeln(key);
This solution worked perfectly without modifying any of my other code. I don't fully understand it but can study up on the syntax.
|
October 28, 2020 Re: Print int[string] sorted by Value | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | On 10/28/20 9:30 AM, Paul wrote: > On Wednesday, 28 October 2020 at 15:40:23 UTC, aberba wrote: >> Have you tries .values() function? dictionary.values.sort() > > Thanks aberba. Yes, that was my first attempt! > > If my terminology is correct that gives me a "range" of sorted VALUES. No, both .values and .keys return dynamic arrays that are freshly populated. .byKey, .byValue, and .byKeyValue are "ranges" that iterate the elements lazily. Ali |
Copyright © 1999-2021 by the D Language Foundation