Vim documentation: vital/Data/Counter
main help file
vital/Data/Counter.txt        Counter library to support convenient tallies.
Maintainer: haya14busa <hayabusa1419@gmail.com>
==============================================================================
CONTENTS                                Vital.Data.Counter-contents
INTRODUCTION                    Vital.Data.Counter-introduction
TERM                            Vital.Data.Counter-term
INTERFACE                       Vital.Data.Counter-interface
  FUNCTIONS                     Vital.Data.Counter-functions
OBJECTS                         Vital.Data.Counter-objects
  Counter Object                  Vital.Data.Counter-Counter
==============================================================================
INTRODUCTION                            Vital.Data.Counter-introduction
Vital.Data.Counter is a counter library to support convenient tallies.
        let s:V = vital#{plugin-name}#new()
        let s:Counter = s:V.import('Data.Counter')
        let s:Math = s:V.import('Math')
        " count elements from a string
        let s:c = s:Counter.new('abcdeabcdabcaba')
        echo s:c.to_dict()
        " => {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
        " three most common elements
        echo s:c.most_common(3)
        " => [['a', 5], ['b', 4], ['c', 3]]
        " list all unique elements
        echo sort(s:c.to_list())
        " => ['a', 'b', 'c', 'd', 'e']
        " list elements with repetitions
        echo join(sort(s:c.elements()), '')
        " => aaaaabbbbcccdde
        " total of all counts
        echo s:Math.sum(s:c.values())
        " => 15
        " count of letter 'a'
        echo s:c.get('a')
        " => 5
        " add counts from list
        call s:c.add(['s', 'h', 'a', 'z', 'a', 'm'])
        " now there are seven 'a'
        echo s:c.get('a')
        " => 7
        " remove all 'b'
        call s:c.del('b')
        " now there are zero 'b'
        echo s:c.get('b')
        " => 0
==============================================================================
TERM                                    Vital.Data.Counter-term
{countable}                             Vital.Data.Counter-term-countable
        A {countable} is one of the followings.
        - String
        - List
        - {count-dict} Vital.Data.Counter-term-count-dict
        - {Counter} Vital.Data.Counter-term-Counter
{count-dict}                            Vital.Data.Counter-term-count-dict
        A {count-dict} is Dictionary whose value is Number.
        e.g. {'a': 1, 'b': 2, 'c': 3}
{Counter}                               Vital.Data.Counter-term-Counter
        A {Counter} is Counter Object Vital.Data.Counter-Counter.
==============================================================================
INTERFACE                               Vital.Data.Counter-interface
------------------------------------------------------------------------------
FUNCTIONS                               Vital.Data.Counter-functions
new([{countable}])                      Vital.Data.Counter.new()
        Return a new 'Counter' object.
==============================================================================
OBJECTS                                 Vital.Data.Counter-objects
------------------------------------------------------------------------------
Counter Object                  Vital.Data.Counter-Counter
Counter.get({key})              Vital.Data.Counter-Counter.get()
        Get count of {key} from Counter. Return 0 if {key} is not in the
        Counter.
        let s:c = s:Counter.new('vim')
        echo s:c.get('v')
        " => 1
        echo s:c.get('b')
        " => 0
Counter.set({key}, {nr})                Vital.Data.Counter-Counter.set()
        Set count of {key} to {nr}.
        let s:c = s:Counter.new('vim')
        call s:c.set('v', 3)
        call s:c.get('v')
        " => 3
Counter.add({countable})        Vital.Data.Counter-Counter.add()
        Adds counts from countable instead of replacing them.
        let s:c = s:Counter.new('vim')
        call s:c.add('vital')
        echo s:c.get('v')
        " => 2
Counter.subtract({countable})   Vital.Data.Counter-Counter.subtract()
        Subtracts count from countable. Counts can be reduced below zero. Both
        the inputs and outputs are allowed to contain zero and negative
        counts.
        let s:c = s:Counter.new('vim')
        call s:c.subtract('vital')
        echo s:c.get('v')
        " => 0
        echo s:c.get('a')
        " => -1
Counter.union({expr})           Vital.Data.Counter-Counter.union()
        {expr} is {Counter} or {count-dict}.  Returns a counter of the maximum
        of value in either of the input counters. It keeps only positive
        counts. It is non-destructive method, it doesn't change the counter
        nor an argument.
        let s:c = s:Counter.new('vim')
        echo s:c.union('vital').to_dict()
        " => {'a': 1, 't': 1, 'v': 1, 'i': 1, 'l': 1, 'm': 1}
Counter.intersection({expr})    Vital.Data.Counter-Counter.intersection()
        {expr} is {Counter} or {count-dict}.  Returns a counter of the maximum
        of value in either of the input counters. It keeps only positive
        counts. It is non-destructive method, it doesn't change the counter
        nor an argument.
        let s:c = s:Counter.new('vim')
        echo s:c.intersection('vital').to_dict()
        " => {'v': 1, 'i': 1}
Counter.clear()                 Vital.Data.Counter-Counter.clear()
        Reset all counts.
        let s:c = s:Counter.new('vim')
        call s:c.clear()
        echo s:c.get('v')
        " => 0
Counter.elements()              Vital.Data.Counter-Counter.elements()
        Returns a list of elements repeating each as many times as its count.
        Elements are returned in arbitrary order. If an element's count is
        less than one, elements() will ignore it.
        let s:c = s:Counter.new('ABCABC')
        echo sort(s:c.elements())
        " => ['A', 'A', 'B', 'B', 'C', 'C']
Counter.most_common({nr})       Vital.Data.Counter-Counter.most_common()
        Returns a list of the {nr} most common elements and their counts
        from the most common to the least. If n is omitted, most_common()
        returns all elements in the counter. Elements with equal counts are
        ordered arbitrarily.
        echo s:Counter.new('abcdeabcdabcaba').most_common(3)
        " => [['a', 5], ['b', 4], ['c', 3]]
Counter.to_dict()               Vital.Data.Counter-Counter.to_dict()
        Returns {count-dict} Vital.Data.Counter-term-count-dict from Counter
        object.
        let s:c = s:Counter.new('ABCABC')
        echo s:c.to_dict()
        " => {'A': 2, 'B': 2, 'C': 2}
Counter.to_list()               Vital.Data.Counter-Counter.to_list()
        Returns list of element in the counter. The order is arbitrary.
        let s:c = s:Counter.new('ABCABC')
        echo sort(s:c.to_list())
        " => ['A', 'B', 'C']
Counter.values()                Vital.Data.Counter-Counter.values()
        Returns list of count in the counter. The order is arbitrary.
        let s:c = s:Counter.new('ABCABC')
        echo sort(s:c.values())
        " => [2, 2, 2]
Counter.in({expr})              Vital.Data.Counter-Counter.in()
        Returns the Number 1 if the given element is in the counter, zero
        otherwise.
        let s:c = s:Counter.new('ABCABC')
        echo s:c.in('A')
        " => 1
        echo s:c.in('D')
        " => 0
Counter.del({expr})             Vital.Data.Counter-Counter.del()
        Deletes the given element from the counter. Does not raise error for
        missing values.
        let s:c = s:Counter.new('ABCABC')
        call s:c.del('A')
        echo s:c.in('A')
        " => 0
Counter.keep_positive()         Vital.Data.Counter-Counter.keep_positive()
        Strips elements with a negative or zero count. This is similar to
        unary addition to collections.Counter in python.
        let c = s:Counter.new({'A': 2, 'B': -1, 'C': 0})
        call c.keep_positive()
        echo c.to_dict()
        " => {'A': 2}
Counter.reverse()               Vital.Data.Counter-Counter.reverse()
        Reverses the sign of counts.
        let c = s:Counter.new({'A': 2, 'B': -1, 'C': 0})
        call c.reverse()
        echo c.to_dict()
        " => {'A': -2, 'B': 1, 'C': 0}
==============================================================================
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl
top - main help file - tag index