Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

36
LINES

< > BotCompany Repo | #1009449 // MultiSetAndTopTen

JavaX fragment (include)

sclass MultiSetAndTopTen<A> {
  int maxEntries = 100000, topTenTargetLength = 10;
  Map<A, Long> ms;
  L<A> topTen;
  
  *() {}
  *(Map<A, Long> *ms, L<A> *topTen) {}
  
  void add(A a) {
    long count = longMultiSet_add(ms, a);
    insertToTopTen(a, count);
    if (l(ms) >= maxEntries)
      longMultiSet_dropBottomPart(ms, l(ms)-iround(maxEntries*0.9));
  }
  
  void insertToTopTen(A a, long count) {
    int originalIndex = indexOf(topTen, a);
    int i = originalIndex < 0 ? l(topTen) : originalIndex;
    while (i > 0 && count >= toLong(ms.get(topTen.get(i-1))))
      --i;
    if (i >= topTenTargetLength || i == originalIndex) ret;
    if (originalIndex >= 0) topTen.remove(originalIndex);
    topTen.add(i, a);
    truncateList(topTen, topTenTargetLength);
  }
  
  void printTopTen {
    printAsciiHeading("TOP TEN (OF " + l(ms) + ")");
    pnl(map(topTen, func(S s) { s + " - " + ms.get(s) }));
  }
  
  void newTopTen(int size) {
    topTenTargetLength = size;
    replaceCollection(topTen, takeFirst(size, sortByDescScore(keys(ms), ms)));
  }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1009449
Snippet name: MultiSetAndTopTen
Eternal ID of this version: #1009449/9
Text MD5: 4a3d380fd5bfb876dafdbf11adf050fb
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2017-08-02 00:55:58
Source code size: 1094 bytes / 36 lines
Pitched / IR pitched: No / No
Views / Downloads: 441 / 480
Version history: 8 change(s)
Referenced in: #1009455 - MultiSetAndTopTen v2 (indexed top 10, long counts, LIVE)