Я использовал его в минимаксный алгоритм . Когда я генерирую новые перемещения, если минимальный игрок побеждает на том узле тогда, значение узла является-в€ћ. С другой стороны, если макс. игрок побеждает тогда, значение того узла является +в€ћ.
кроме того, если Вы генерируете состояния узлов/игры и затем испытываете несколько эвристики, можно установить все значения узла к-в€ћ / + в€ћ, который когда-либо имеет смысл и затем когда Вы выполняете эвристику его легкое для устанавливания значения узла:
node_val = -∞
node_val = max(heuristic1(node), node_val)
node_val = max(heuristic2(node), node_val)
node_val = max(heuristic2(node), node_val)
Это можно сделать с помощью DirectoryEntry
, но я не думаю, что в SearchResultCollection
есть все поля.
Попробуйте создать DirectoryEntry
для каждого результата поиска, он должен иметь все свойства активного каталога:
DirectoryEntry entry = result.GetDirectoryEntry();
Также обратите внимание, что в активном каталоге каждое свойство может иметь несколько значений (например, поле MemberOf), поэтому вы их также придется повторить.
Я написал аналогичный метод, но выбрал список List
с ключами / значениями (он казался более управляемым по сравнению с WCF. ILookup
был бы оптимальным, но я не мог получить его работать здесь). Вот он, удален из try / catch / using
var list = new List<KeyValuePair<string, string>>();
foreach (PropertyValueCollection property in entry.Properties)
foreach (object o in property)
{
string value = o.ToString();
list.Add(new KeyValuePair<string, string>(property.PropertyName, value));
}
Вы можете перебирать все свойства следующим образом:
foreach (SearchResult searchResult in allResults)
{
foreach (string propName in searchResult.Properties.PropertyNames)
{
ResultPropertyValueCollection valueCollection =
searchResult.Properties[propName];
foreach (Object propertyValue in valueCollection)
{
Console.WriteLine("Property: " + propName + ": " + propertyValue.ToString());
}
}
}
Это то, что вам нужно?