В настоящее время я использую Dictionary<int,node>
для хранения около 10000 узлов. Ключ используется в качестве идентификационного номера для последующего поиска, а «узел» - это класс, который содержит некоторые данные. Другие классы в программе используют идентификационный номер в качестве указателя на узел. (это может показаться неэффективным. Однако объяснение моих аргументов в пользу использования словаря для этого выходит за рамки моего вопроса.)
Однако 20% узлов являются дубликатами.
Что я хочу сделать, это когда я добавляю проверку узла, чтобы увидеть, существует ли все это готово. если это так, то используйте этот идентификационный номер. Если нет, создайте новый.
Это мое текущее решение проблемы:
public class nodeDictionary
{
Dictionary<int, node> dict = new Dictionary<int, node>( );
public int addNewNode( latLng ll )
{
node n = new node( ll );
if ( dict.ContainsValue( n ) )
{
foreach ( KeyValuePair<int, node> kv in dict )
{
if ( kv.Value == n )
{
return kv.Key;
}
}
}
else
{
if ( dict.Count != 0 )
{
dict.Add( dict.Last( ).Key + 1, n );
return dict.Last( ).Key + 1;
}
else
{
dict.Add( 0, n );
return 0;
}
}
throw new Exception( );
}//end add new node
}
Проблема заключается в том, что при попытке добавить новый узел в список из 100 000 узлов, для добавления узла требуется 78 миллисекунд. Это неприемлемо, потому что я мог бы добавить дополнительные 1000 узлов в любой момент времени.
Итак, есть ли лучший способ сделать это? Я не ищу кого-то, чтобы написать код для меня, я просто ищу руководство.