QueryEngine<T0>.SetSearchDataCallback
Declaration
public void SetSearchDataCallback(Func<TData,IEnumerable<string>> getSearchDataCallback);public void SetSearchDataCallback(Func<TData,IEnumerable<string>> getSearchDataCallback, stringComparison stringComparison);Параметры
| Параметр | Описание |
|---|---|
| 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.
Declaration
public void SetSearchDataCallback(Func<TData,IEnumerable<string>> getSearchDataCallback, Func<string,string> searchWordTransformerCallback, stringComparison stringComparison);Параметры
| Параметр | Описание |
|---|---|
| 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})"; } } }