static void Main(string[] args) { var trie = new TrieLib.Trie(); var itemsSet = new Dictionary <int, string>(); itemsSet.Add(1, "Victor test hiking club biography"); itemsSet.Add(2, "Alex"); itemsSet.Add(3, "Constructor"); itemsSet.Add(4, "Destructor"); trie.InsertSet(itemsSet); Console.WriteLine(string.Join(",", trie.Search("Alex").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.WriteLine(string.Join(",", trie.Search("Test").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.WriteLine(string.Join(",", trie.Search("Victor").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.WriteLine(string.Join(",", trie.Search("tor").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.WriteLine(string.Join(",", trie.Search("e").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.WriteLine(string.Join(",", trie.Search("o").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.WriteLine(string.Join(",", trie.Search("hik").OrderBy(e => e.Value).Select(s => $"{itemsSet[s.Key]}"))); Console.ReadLine(); }
public async Task <IActionResult> GetSuggestions([FromRoute] string prefix) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } TrieLib.Trie trie = GetTrie(1); var suggestionIds = trie.Search(prefix); var suggestions = await(from t in _context.Translation where suggestionIds.Contains(t.Id) select t.Text).Take(MaxResults).ToListAsync(); if (suggestions == null) { return(NotFound()); } return(Ok(suggestions)); }
private TrieLib.Trie GetTrie(int cultureId) { if (!_cultureTries.ContainsKey(cultureId)) { var translations = (from t in _context.Translation where t.CultureId == cultureId select t).ToList(); var entries = new Dictionary <int, string>(); translations.ForEach(translation => entries.Add(translation.Id, translation.Text.ToLower())); lock (lockObject) { var cultureTrie = new TrieLib.Trie(); cultureTrie.InsertSet(entries); _cultureTries.TryAdd(cultureId, cultureTrie); } } TrieLib.Trie tree; if (_cultureTries.TryGetValue(cultureId, out tree)) { return(tree); } return(new TrieLib.Trie()); }