C# Combining the values of a single dictionary into a single expanded list -


here's scenario: have dictionary of words / suggested terms. trying create list of new values combining suggested terms each word. number of keys can variable (usually 1-3 words):

var suggestions = new dictionary<string, list<suggestitem>>(); 

where suggestitem contains property of public string term {get;set;}

the way algorithm works given sentance, words split apart, each word check , expanded if abbreviation, , passed through spell checker, returns list of suggestions. these results stored in dictionary original word key. part works fine. needing turning dictionary list of suggestions every possible combination of suggested terms.

example:

given sentence:

"e cleve" 

generates dictionary:

keys:                 values: east                   east                        eastlake cleve                  cleves                        college                        cleveland                        coolville                        cloverdale                        cedarville                        celeryville                        circleville                        conesville                        centerville                        clairsville                        clarksville                        chesterville                        cridersville

what need returned is:

terms east cleves east college east cleveland east coolville east cloverdale east cedarville east celeryville east circleville east conesville east centerville east clairsville east clarksville east chesterville east cridersville eastlake cleves eastlake college eastlake cleveland eastlake coolville eastlake cloverdale eastlake cedarville eastlake celeryville eastlake circleville eastlake conesville eastlake centerville eastlake clairsville eastlake clarksville eastlake chesterville eastlake cridersville

as list<string>()

note: can hard code 2 keys, there need variable number of keys.

note 2: apologize ambiguity expected results. hope edit clarifies this.

if there 3 words in sentence: "e cleve commons", have 3 keys in suggestions dictionary:

keys:                 values: east                   east                        eastlake cleve                  cleves                        college                        cleveland                        coolville                        cloverdale                        cedarville                        celeryville                        circleville                        conesville                        centerville                        clairsville                        clarksville                        chesterville                        cridersville commons                collins                        corners                        congress                        columbus                        conesville                        crooksville

and results list as:

terms east cleves collins east college collins east cleveland collins east coolville collins east cloverdale collins east cedarville collins east celeryville collins east circleville collins east conesville collins east centerville collins east clairsville collins east clarksville collins east chesterville collins east cridersville collins eastlake cleves collins eastlake college collins eastlake cleveland collins eastlake coolville collins eastlake cloverdale collins eastlake cedarville collins eastlake celeryville collins eastlake circleville collins eastlake conesville collins eastlake centerville collins eastlake clairsville collins eastlake clarksville collins eastlake chesterville collins eastlake cridersville collins east cleves collins east college collins east cleveland collins east coolville collins east cloverdale collins east cedarville collins east celeryville collins east circleville collins east conesville collins east centerville collins east clairsville collins east clarksville collins east chesterville collins east cridersville collins eastlake cleves collins eastlake college collins eastlake cleveland collins eastlake coolville collins eastlake cloverdale collins eastlake cedarville collins eastlake celeryville collins eastlake circleville collins eastlake conesville collins eastlake centerville collins eastlake clairsville collins eastlake clarksville collins eastlake chesterville collins eastlake cridersville collins east cleves corners east college corners east cleveland corners east coolville corners east cloverdale corners east cedarville corners east celeryville corners east circleville corners east conesville corners east centerville corners east clairsville corners east clarksville corners east chesterville corners east cridersville corners eastlake cleves corners eastlake college corners eastlake cleveland corners eastlake coolville corners eastlake cloverdale corners eastlake cedarville corners eastlake celeryville corners eastlake circleville corners eastlake conesville corners eastlake centerville corners eastlake clairsville corners eastlake clarksville corners eastlake chesterville corners eastlake cridersville corners east cleves congress east college congress east cleveland congress east coolville congress east cloverdale congress east cedarville congress east celeryville congress east circleville congress east conesville congress east centerville congress east clairsville congress east clarksville congress east chesterville congress east cridersville congress eastlake cleves congress eastlake college congress eastlake cleveland congress eastlake coolville congress eastlake cloverdale congress eastlake cedarville congress eastlake celeryville congress eastlake circleville congress eastlake conesville congress eastlake centerville congress eastlake clairsville congress eastlake clarksville congress eastlake chesterville congress eastlake cridersville congress east cleves columbus east college columbus east cleveland columbus east coolville columbus east cloverdale columbus east cedarville columbus east celeryville columbus east circleville columbus east conesville columbus east centerville columbus east clairsville columbus east clarksville columbus east chesterville columbus east cridersville columbus eastlake cleves columbus eastlake college columbus eastlake cleveland columbus eastlake coolville columbus eastlake cloverdale columbus eastlake cedarville columbus eastlake celeryville columbus eastlake circleville columbus eastlake conesville columbus eastlake centerville columbus eastlake clairsville columbus eastlake clarksville columbus eastlake chesterville columbus eastlake cridersville columbus east cleves conesville east college conesville east cleveland conesville east coolville conesville east cloverdale conesville east cedarville conesville east celeryville conesville east circleville conesville east conesville conesville east centerville conesville east clairsville conesville east clarksville conesville east chesterville conesville east cridersville conesville eastlake cleves conesville eastlake college conesville eastlake cleveland conesville eastlake coolville conesville eastlake cloverdale conesville eastlake cedarville conesville eastlake celeryville conesville eastlake circleville conesville eastlake conesville conesville eastlake centerville conesville eastlake clairsville conesville eastlake clarksville conesville eastlake chesterville conesville eastlake cridersville conesville east cleves crooksville east college crooksville east cleveland crooksville east coolville crooksville east cloverdale crooksville east cedarville crooksville east celeryville crooksville east circleville crooksville east conesville crooksville east centerville crooksville east clairsville crooksville east clarksville crooksville east chesterville crooksville east cridersville crooksville eastlake cleves crooksville eastlake college crooksville eastlake cleveland crooksville eastlake coolville crooksville eastlake cloverdale crooksville eastlake cedarville crooksville eastlake celeryville crooksville eastlake circleville crooksville eastlake conesville crooksville eastlake centerville crooksville eastlake clairsville crooksville eastlake clarksville crooksville eastlake chesterville crooksville eastlake cridersville crooksville 

thank in advance.

you can use cartesian product eric lippert

var result = cartesianproduct(dict.values.select(x => x.term))             .select(x => string.join(" ", x))             .tolist(); 

static ienumerable<ienumerable<t>> cartesianproduct<t>(ienumerable<ienumerable<t>> sequences) {     // base case:     ienumerable<ienumerable<t>> result = new[] { enumerable.empty<t>() };     foreach (var sequence in sequences)     {         var s = sequence; // don't close on loop variable         // recursive case: use selectmany build new product out of old 1         result =             seq in result             item in s             select seq.concat(new[] { item });     }     return result; } 

Comments

Popular posts from this blog

html - Firefox flex bug applied to buttons? -

html - Missing border-right in select on Firefox -

c# - two queries in same method -