public Option <JMDictEntry> LookupBySequenceNumber(long sequenceNumber)
        {
            var searchResult = entries.BinarySearch(sequenceNumber, e => e.SequenceNumber);

            if (searchResult.id != -1)
            {
                return(searchResult.element.Some());
            }

            return(Option.None <JMDictEntry>());
        }
        public IEnumerable <JMDictEntry> Lookup(string key)
        {
            var res = kvps.BinarySearch(key, kvp => kvp.Key, StringComparer.Ordinal);

            if (res.id == -1)
            {
                return(null);
            }
            else
            {
                return(It());
            }

            IEnumerable <JMDictEntry> It()
            {
                var sequenceNumbers = res.element.Value;

                foreach (var sequenceNumber in sequenceNumbers)
                {
                    var searchResult = entries.BinarySearch(sequenceNumber, e => e.SequenceNumber);
                    if (searchResult.id != -1)
                    {
                        yield return(searchResult.element);
                    }
                }
            }
        }
        public IEnumerable <JGram.Entry> Lookup(string key)
        {
            int limit = 50;

            var(start, end) = index.EqualRange(key, kvp => kvp.Key);
            var outOfBoundLimit = (limit - (end - start)) / 2;

            start = Math.Max(0, start - outOfBoundLimit);
            end   = Math.Min(entries.Count, end + outOfBoundLimit);
            var mid = (start + end) / 2;

            var resultEntries = EnumerableExt.Range(start, end - start)
                                .OrderBy(i => Math.Abs(i - mid))
                                .Select(i => index[i])
                                .Select(indexEntry =>
            {
                var indexKey   = indexEntry.Key;
                var entryKey   = indexEntry.Value;
                var(entry, id) = entries.BinarySearch(entryKey, e => e.Id);
                return((indexKey, entry).SomeWhen(_ => id != -1));
            })
                                .Values()
                                .OrderByDescending(r => CommonPrefixLength(r.indexKey, key))
                                .Where(r => CommonPrefixLength(r.indexKey, key) != 0)
                                .Select(r => r.entry);

            return(EnumerableExt.DistinctBy(resultEntries, entry => entry.Id));
        }
Exemple #4
0
 public IEnumerable <WordnetDictionaryMeaning> Lookup(string word)
 {
     var(element, id) = entries.BinarySearch(word, kvp => kvp.Key, StringComparer.Ordinal);
     if (id == -1)
     {
         return(Enumerable.Empty <WordnetDictionaryMeaning>());
     }
     else
     {
         return(element.Value);
     }
 }