wordMatcher | 搜索词匹配函数。第一个参数是搜索词。第二个参数是布尔值,表示精确匹配或不精确匹配。第三个参数是 StringComparison 选项。第四个参数是搜索数据回调返回的数组中的一个元素。如果匹配则函数返回 true,否则返回 false。 |
设置要使用的搜索词匹配函数,以代替默认函数。设置为 null 以使用默认函数。
using System; using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEditor.Search; using UnityEngine; static class Example_QueryEngine_SetSearchWordMatcher { static List<MyObjectType> s_Data; [MenuItem("Examples/QueryEngine/SetSearchWordMatcher")] public static void RunExample() { // Set up the query engine var queryEngine = new QueryEngine<MyObjectType>(); queryEngine.AddFilter("id", myObj => myObj.id); queryEngine.SetSearchDataCallback(myObj => new[] { myObj.id.ToString(), myObj.name }); // Set a lowercase word matching function queryEngine.SetSearchWordMatcher((searchWord, isExact, comparisonOption, searchData) => { var searchWordLower = searchWord.ToLowerInvariant(); var searchDataLower = searchData.ToLowerInvariant(); if (isExact) return searchDataLower.Equals(searchWordLower, StringComparison.Ordinal); return searchDataLower.IndexOf(searchWordLower, StringComparison.Ordinal) >= 0; }); s_Data = new List<MyObjectType>() { new MyObjectType { id = 0, name = "Test with lower", position = new Vector2(0, 0), active = false }, new MyObjectType { id = 1, name = "Test With Upper", position = new Vector2(0, 1), active = true } }; // Find all items that have the word "with" (lowercase and uppercase, because of our word matcher) var query = queryEngine.ParseQuery("with"); var filteredData = query.Apply(s_Data).ToList(); Debug.Assert(filteredData.Count == 2, $"There should be 2 items in the filtered list but found {filteredData.Count} items."); Debug.Assert(filteredData.Contains(s_Data[0]), "First item should be in the list."); Debug.Assert(filteredData.Contains(s_Data[1]), "Second item should be in the list."); } class MyObjectType { public int id { get; set; } public string name { get; set; } = string.Empty; public Vector2 position { get; set; } = Vector2.zero; public bool active { get; set; } public override string ToString() { return $"({id}, {name}, ({position.x}, {position.y}), {active})"; } } }