*vital/Data/Dict.txt*		dictionary utilities library.

Maintainer: thinca  <thinca+vim@gmail.com>

==============================================================================
CONTENTS				*Vital.Data.Dict-contents*

INTRODUCTION			|Vital.Data.Dict-introduction|
INTERFACE			|Vital.Data.Dict-interface|
  FUNCTIONS			  |Vital.Data.Dict-functions|

==============================================================================
INTRODUCTION				*Vital.Data.Dict-introduction*

*Vital.Data.Dict* is Dictionary Utilities Library.
It provides some functions to manipulate |Dictionary|.

==============================================================================
INTERFACE				*Vital.Data.Dict-interface*

------------------------------------------------------------------------------
FUNCTIONS				*Vital.Data.Dict-functions*

from_list({key-value-list})		*Vital.Data.Dict.from_list()*
	Makes a dictionary from {key-value-list}.
	{key-value-list} is one of following forms: >
	[key, value, key, value]
<	or >
	[[key, value], [key, value]]

make({keys}, {values} [, {fill}])	*Vital.Data.Dict.make()*
	Makes a dictionary from {keys} and {values}.
	If the length of {keys} is less than {values}, tails of {values} are
	ignored.
	If the length of {keys} is more than {values}, {values} are filled by
	{fill}.
	If {fill} is omitted, 0 is used.
>
	:echo Dict.make(['one', 'two', 'three'], [1, 2, 3])
	{'one': 1, 'two': 2, 'three': 3}
	:echo Dict.make(['one', 'two', 'three'], [1, 2, 3, 4])
	{'one': 1, 'two': 2, 'three': 3}
	:echo Dict.make(['one', 'two', 'three'], [1, 2])
	{'one': 1, 'two': 2, 'three': 0}
	:echo Dict.make(['one', 'two', 'three'], [1, 2], 9)
	{'one': 1, 'two': 2, 'three': 9}
<

swap({dict})				*Vital.Data.Dict.swap()*
	Makes a dictionary that swapped keys and values.
>
	:echo Dict.swap({'one': 1, 'two': 2, 'three': 3})
	{'1': 'one', '2': 'two', '3': 'three'}
<

make_index({list} [, {value}])		*Vital.Data.Dict.make_index()*
	Makes an index dictionary.  This dictionary has {list} as key, and has
	{value} as each value.
	If {value} is omitted, 1 is used.
>
	:echo Dict.make_index(['apple', 'orange', 'banana'])
	{'apple': 1, 'orange': 1, 'banana': 1}
	:echo Dict.make_index(['apple', 'orange', 'banana'], 5)
	{'apple': 5, 'orange': 5, 'banana': 5}
<

pick({dict}, {keys})			*Vital.Data.Dict.pick()*
	Returns a copy of the {dict}, filtered to only have entries for the
	whitelisted {keys}.
>
	:let d = {'one' : 1, 'two' : 2, 'three' : 3}
	:echo Dict.pick(d, ['one', 'three'])
	{'one': 1, 'three': 3}
<

omit({dict}, {keys})			*Vital.Data.Dict.omit()*
	Returns a copy of the {dict}, filtered to omit the blacklisted {keys}.
>
	:let d = {'one' : 1, 'two' : 2, 'three' : 3}
	:echo Dict.omit(d, ['one', 'three'])
	{'two': 2}
<

clear({dict})				*Vital.Data.Dict.clear()*
	Remove all the elements of {dict}.  Returns the empty dictionary
	{dict}.
>
	:let d = {'one' : 1, 'two' : 2, 'three' : 3}
	:echo Dict.clear(d)
	{}
	:echo d
	{}
<

max_by({dict}, {expr})			*Vital.Data.Dict.max_by()*
	Returns a list [key, val] which is maximum value in {dict} through
	given {expr}.
	Throws an exception if {dict} is empty.
	both "v:key" and "v:val" can be used in {expr}.
>
	:echo Dict.max_by({'alice' : 1, 'bob' : 2, 'carol' : 3}, 'len(v:key) - v:val')
	['alice', 1]
<

min_by({dict}, {expr})			*Vital.Data.Dict.min_by()*
	Returns a list [key, val] which is minimum value in {dict} through
	given {expr}.
	Throws an exception if {dict} is empty.
	both "v:key" and "v:val" can be used in {expr}.
>
	:echo Dict.min_by({'alice' : 1, 'bob' : 2, 'carol' : 3}, 'len(v:key) - v:val')
	['bob', 2]
<

foldl({f}, {init}, {dict})		*Vital.Data.Dict.foldl()*
	TODO
	Behaves like Haskell's Data.Map.Lazy.foldlWithKey().

foldr({f}, {init}, {dict})		*Vital.Data.Dict.foldr()*
	TODO
	Behaves like Haskell's Data.Map.Lazy.foldrWithKey().

==============================================================================
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl
