getSearchDataCallback | 用于获取与搜索词进行匹配数据的回调。获取 TData 类型对象并返回 IEnumerable 字符串。 |
stringComparison | 字符串比较选项。 |
设置用于获取与搜索词进行匹配的回调。
此函数允许你注册回调,该回调将在你尝试筛选的数据集的每个元素上调用,以检索将与搜索词(例如,不是筛选器的词)进行比较的搜索数据。这里给出了一个示例
// Set up what data from objects of type MyObjectType will be matched against search words queryEngine.SetSearchDataCallback(myObj => new[] { myObj.id.ToString(), myObj.name });
有关如何使用此函数的更完整示例,请参阅 QueryEngine。
getSearchDataCallback | 用于获取与搜索词进行匹配数据的回调。获取 TData 类型对象并返回 IEnumerable 字符串。 |
searchWordTransformerCallback | 在查询解析期间用于转换搜索词的回调。在大写或小写比较时非常有用。可以返回 null 或空字符串以从查询中移除该词。 |
stringComparison | 字符串比较选项。 |
设置用于获取与搜索词进行匹配的回调。
此函数允许你注册回调,该回调将在你尝试筛选的数据集的每个元素上调用,以检索将与搜索词(例如,不是筛选器的词)进行比较的搜索数据。另外,它还让你能够对搜索词本身应用转换,以便为比较做好准备。此转换在解析查询时只执行一次。
using System; using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEditor.Search; using UnityEngine; static class Example_QueryEngine_SetSearchDataCallback { static List<MyObjectType> s_Data; [MenuItem("Examples/QueryEngine/SetSearchDataCallback")] public static void RunExample() { // Set up the query engine var queryEngine = new QueryEngine<MyObjectType>(); // Set the search data callback with a word transformer. // The word transformer will make sure that the words used for comparison are already converted to lowercase, // which will increase performance by doing comparisons with Ordinal instead of OrdinalIgnoreCase queryEngine.SetSearchDataCallback(myObj => new[] { myObj.id.ToString(), myObj.name }, word => word.ToLowerInvariant(), StringComparison.Ordinal); s_Data = new List<MyObjectType>() { new MyObjectType { id = 0, name = "Test 1", position = new Vector2(0, 0), active = false }, new MyObjectType { id = 1, name = "Test 2", position = new Vector2(0, 1), active = true }, new MyObjectType { id = 2, name = "Test 3", position = new Vector2(1, 0), active = false }, new MyObjectType { id = 3, name = "Test 4", position = new Vector2(1.2f, 0), active = false }, }; // Find all items that contain "test" in the search data var query = queryEngine.ParseQuery("Test"); var filteredData = query.Apply(s_Data).ToList(); Debug.Assert(filteredData.Count == 4, $"There should be 4 items in the filtered list but found {filteredData.Count} items."); Debug.Assert(filteredData.Contains(s_Data[0]), "Test 1 should be in the list as its name contains \"test\"."); Debug.Assert(filteredData.Contains(s_Data[1]), "Test 2 should be in the list as its name contains \"test\"."); Debug.Assert(filteredData.Contains(s_Data[2]), "Test 3 should be in the list as its name contains \"test\"."); Debug.Assert(filteredData.Contains(s_Data[3]), "Test 4 should be in the list as its name contains \"test\"."); // Find all items that have exactly "test 4" in the search data. query = queryEngine.ParseQuery("!\"Test 4\""); filteredData = query.Apply(s_Data).ToList(); Debug.Assert(filteredData.Count == 1, $"There should be 1 item in the filtered list but found {filteredData.Count} items."); Debug.Assert(filteredData.Contains(s_Data[3]), "Test 4 should be in the list as its name is exactly \"test 4\"."); } class MyObjectType { public int id { get; set; } string m_Name = string.Empty; public string name { get => m_Name; set => m_Name = value.ToLowerInvariant(); } public Vector2 position { get; set; } = Vector2.zero; public bool active { get; set; } public override string ToString() { return $"({id}, {name}, ({position.x}, {position.y}), {active})"; } } }