Hi Alvareh, Many thanks, nice solution. I added values.js and it works fine. By the way I understood the bottleneck is the lookup-index maco in my solution For 2000 entries TW quickly freezes. I work to see how to use an alternative approach for that part.
Amazingly TW has indexes filter operator but not values! Isn't it worth adding it to the Tiddlywiki core? Best wishes Mohammad On Fri, Feb 19, 2021 at 12:39 AM Álvaro <[email protected]> wrote: > I also want to work with indes and values. But I did not know how to do > it combining filters like you. Then i created a new filter cloning * > $:/core/modules/filters/indexes.js *and I modified it for obtain values, > the important changes are in bold. > > /*\ > values.js > type: application/javascript > module-type: filteroperator > > Filter operator for returning the values of a data tiddler > > \*/ > (function(){ > "use strict"; > > /* > Export our filter function > */ > exports.*values* = function(source,operator,options) { > var results = []; > source(function(tiddler,title) { > var data = options.wiki.getTiddlerDataCached(title); > if(data) { > $tw.utils.pushTop(results,Object.*values*(data)); > } > }); > return results; > }; > > })(); > > Now you can use it. [<dataTiddler>values[]] instead the *populate* macro > which is filtering the output of other filter. > El jueves, 18 de febrero de 2021 a las 20:30:23 UTC+1, Mohammad escribió: > >> when using nsort on new values (e.g. value::index note :: is a character >> used to create new entries) it fails. >> One solution is as below, but for large number index - value (e.g 200 or >> more) the solution is very slow >> >> This solution contains >> >> 1. a populate macro to list all values >> 2. a wikify and list widget let sort values >> 3. a lookup macro to find index(s) for a value >> >> \define dataTiddler() myData >> \define myfilter() [<dataTiddler>indexes[]] >> >> \define populate() >> <$list filter="[subfilter<myfilter>]"> >> <$text text={{{[<dataTiddler>getindex<currentTiddler>]}}}/> >> </$list> >> \end >> >> \define lookup-index(val) >> <$list filter="[subfilter<myfilter>]" variable=idx> >> <$list filter="[<dataTiddler>getindex<idx>] +[match[$val$]]"> >> <tr> >> <td><$link to=<<idx>> /></td><td> $val$ </td> >> </tr> >> </$list> >> </$list> >> \end >> >> >> <table> >> <$wikify name=u text=<<populate>> > >> <$list filter="[enlist<u>nsort[]]"> >> <$macrocall $name=lookup-index val=<<currentTiddler>> /> >> </$list> >> </$wikify> >> </table> >> >> >> The above can be tested in https://tiddlywiki.com/ if one creates a data >> tiddler with the myData title containing the data of the previous post. >> >> Question: as stated above this solution is very slow for large numbers of >> data (index-value pairs). What alternative solution do you propose? >> >> Best wishes >> Mohammad >> >> >> On Thu, Feb 18, 2021 at 10:07 PM Mohammad Rahmani <[email protected]> >> wrote: >> >>> This is an old question and there are several solution for that, but not >>> for the case I explain here >>> >>> Assume you have a dataTiddler or JSON tiddler with data like below >>> >>> nella: -1 >>> rita: 1 >>> villa: 0 >>> lola: -7 >>> sina: 3 >>> cobra: 2 >>> fifa: -2 >>> zila: 3 >>> afra: 1 >>> >>> >>> I want to list data in this dictionary table sorted by value, so I >>> should have >>> >>> lola: -7 >>> fifa: -2 >>> nella: -1 >>> villa: 0 >>> afra: 1 >>> rita: 1 >>> cobra: 2 >>> sina: 3 >>> zila: 3 >>> >>> Note, there are duplicated values. The solution is that new entries >>> created from appending value to index like value::index do not work here! >>> As you need to use nsort >>> >>> >>> >>> Best wishes >>> Mohammad >>> >> -- > You received this message because you are subscribed to the Google Groups > "TiddlyWiki" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/tiddlywiki/65d562c5-88e4-49b1-aa5f-e399ca397a81n%40googlegroups.com > <https://groups.google.com/d/msgid/tiddlywiki/65d562c5-88e4-49b1-aa5f-e399ca397a81n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "TiddlyWiki" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/CAAV1gMBoa2AFOUseTtFHs%2BTsytxvPEq8ZQ6xYmao5FK8b5ahLg%40mail.gmail.com.

