public Bitap(string pattern, FuseOptions options) { _options = options; _pattern = options.caseSensitive ? pattern : pattern.ToLower(); if (_pattern.Length <= options.maxPatternLength) { _alphabet = GetPatternAlphabet(); } }
public Fuse(List <T> list, FuseOptions options = null) { _options = options != null ? options : new FuseOptions(); if (_options.getFn == null) { _options.getFn = DeepValue; } SetCollection(list); }
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); }