2013-03-28 2 views
2

Я использую VS2010 Express и новичок для программирования.Как сопоставить несколько разных имен команд в одной команде

Я извлекаю ставки с разных сайтов и делая записи.

Однако они используют разные имена для одной и той же команды, и это единственный способ сопоставить команду через сайты.

Например, Man United, Man Utd, Manchester United, Manu являются одними и теми же командами, но используются на разных сайтах.

Я считаю, что это не редкая проблема, и для ее решения должны быть некоторые стандартные способы или типы объектов.

Если есть, сообщите мне.

На этом этапе я решил сделать список в качестве базы данных

List<teamdata> teamTable = new List<teamdata>(); 

public class teamdata 
{ 
private long teamId; 
private List<string> teamName; // Names like Man United, Man Utd... are added 
... 
} 

мне нужно не искать с помощью таблицы для каждого имени (некоторые быстрые алгоритмы поиска), пока команда идентификатор может быть назначен.

Я знаю, что это худшее воплощение. Пожалуйста, скажите мне правильное направление.

+0

Сколько команд и сколько имен команд вы ожидаете, что будет в общей сложности? (Я пытаюсь выяснить, следует ли тратить время на оптимизацию производительности здесь.) –

+0

Я уверен, что у вас есть а не «худшая» реализация. :) –

+0

Возможно, всего несколько тысяч имен команд. Там может быть тысяча имен для каждой царапины. –

ответ

1

Вы могли бы упростить конструкцию с List и класс teamdata в Dictionary<long,HashSet<string>> teams - где ключ команды ID и значение набор альтернативных имен, и вопрос о нахождении команды будет звонить (скажем, ваш `

Dictionary<long,HashSet<string>> teams = new Dictionary<long,HashSet<string>>(); 
... fill data 
string queryName = "Man Utd"`) 

var teamOrNull = teams.Where(p=>p.Value.Contains(queryName)).FirstOrDefault() 
if(teamOrNull != null) 
    long foundID = teamOrNull.Key; 
+0

Это лучше, чем использование списка! В чем сложность поиска? –

+0

Этот ответ http://stackoverflow.com/questions/9812020/what-is-the-lookup-time-complexity-of-hashsettiequalitycomparert говорит, что сложность поиска HashSet - это O (1). Поскольку код будет выглядеть во всех HashSet, он будет расти с количеством команд (n), поэтому я бы сказал O (n), что довольно хорошо. – Axarydax

0

Эту проблему можно решить с помощью нечеткой логики (http://en.wikipedia.org/wiki/Fuzzy_logic). Если вы используете SQL Server, функция SOUNDEX может вам помочь.

+1

Я не уверен, что soundex для «manchester united» и «ManU» будет похож ... – Axarydax

+0

Да, Axarydax был прав. Некоторые имена могут быть совершенно разными. –