Esempio n. 1
0
        public Bitap(string pattern, FuseOptions options)
        {
            _options = options;
            _pattern = options.caseSensitive ? pattern : pattern.ToLower();

            if (_pattern.Length <= options.maxPatternLength)
            {
                _alphabet = GetPatternAlphabet();
            }
        }
Esempio n. 2
0
        public Fuse(List <T> list, FuseOptions options = null)
        {
            _options = options != null ? options : new FuseOptions();

            if (_options.getFn == null)
            {
                _options.getFn = DeepValue;
            }

            SetCollection(list);
        }
Esempio n. 3
0
        private static List <FuseResult <T> > Format(List <AnalyzeResult> results, FuseOptions <T> options)
        {
            var finalOutput  = new List <FuseResult <T> >();
            var transformers = new List <TransformResult>();

            if (options.includeMatches)
            {
                transformers.Add((AnalyzeResult result, ref TransformData data) => {
                    var output   = result.output;
                    data.matches = new List <FuseMatch>();

                    for (var i = 0; i < output.Count; i++)
                    {
                        var item = output[i];

                        if (item.matchedIndices.Count == 0)
                        {
                            continue;
                        }

                        var entry = new FuseMatch
                        {
                            indicies = item.matchedIndices,
                            value    = item.value
                        };

                        if (!string.IsNullOrEmpty(item.key))
                        {
                            entry.key = item.key;
                        }

                        if (item.arrayIndex > -1)
                        {
                            entry.arrayIndex = item.arrayIndex;
                        }

                        data.matches.Add(entry);
                    }
                });
            }

            if (options.includeScore)
            {
                transformers.Add((AnalyzeResult result, ref TransformData data) =>
                {
                    data.score = result.score;
                });
            }

            for (var i = 0; i < results.Count; i++)
            {
                var result = results[i];

                if (transformers.Count == 0)
                {
                    finalOutput.Add(new FuseResult <T>
                    {
                        item = (T)result.item
                    });

                    continue;
                }

                var data = new TransformData {
                    item = result.item
                };

                for (var j = 0; j < transformers.Count; j++)
                {
                    transformers[j](result, ref data);
                }

                finalOutput.Add(new FuseResult <T>
                {
                    item    = (T)data.item,
                    score   = data.score,
                    matches = data.matches
                });
            }

            return(finalOutput);
        }