2010-12-11 5 views
0

У меня есть xml, который содержит некоторые ключевые слова. Формат XML этого:Какая структура данных подходит для решения этой проблемы?

<keywords> 
<keyword name="Name" /> 
<keyword name="City" /> 
<keyword name="Email" /> 
<keywords> 

количество ключевых слов в XML является переменным и может быть что угодно (число может быть в тысячах).

У меня есть текстовый файл, который имеет две колонки. В первом столбце содержатся ключевые слова, а вторые столбцы имеют значение для ключевого слова. Размер каждого текстового файла составляет около 50 МБ. Основываясь на ключевых словах в xml, мне нужно найти соответствующие значения из текстового файла. Я могу легко разобрать текстовый файл и получить значения.

Теперь вот моя проблема: У меня есть 10 текстовых файлов, мне нужно найти значения для ключевых слов, упомянутых в xml, из всех этих 10 текстовых файлов и посмотреть, являются ли значения для ключевых слов из всех 10 текстовых файлов одинаковыми или нет. Мне нужно, чтобы отобразить результаты, как это:

Названия: 3 различных значений у 10, текстовых файлов Город: ABCDEF Email: [email protected]

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

Что является самым элегантным способом решения этой проблемы в C#? Какая лучшая структура данных подходит для таких проблем?

+0

Если вы должны были выбрать, какой вы хотите оптимизировать. Загрузка процессора или память? –

+0

Я хотел бы оптимизировать память. – Sandy

+0

Версия вашей инфраструктуры .net? –

ответ

0

данные часть вашего вопроса является родовым Lookup

элегантное часть, не удивительно LINQ. Некоторая комбинация Enumerable.ToLookup Method или Enumerable.GroupBy Method, в зависимости от того, сколько работы вам нужно сделать, чтобы связать ключи со значениями.

Вот treasure chest of examples для использования GroupBy

Приветствия,
Berryl

0

Предполагая, что все данные вписываются в память, вы можете использовать MultiMap, то есть карту, которая может принимать несколько значений для каждого уникального ключа. В C# нет реализации по умолчанию, но много в Интернете (например, http://dotnetperls.com/multimap). Если вам нужна дополнительная информация о том, как разбирать файлы для создания карты, вам нужно предоставить более подробную информацию о формате файла.

0
class KeyWord{ 
    private String name; 
    private String value; 
    public KeyWord(String k, String v){ 
     name = k; 
     value = v; 
    } 
} 

// different file 

private List<KeyWord> keywords = new List<KeyWord>(); 

Список хороший.

другой способ, если у вас есть XML определения схемы, то вы можете динамически генерировать классы

"C: \ Program Files \ Microsoft Visual Studio 9 \ SDK \ v2.0 \ Bin \ Xsd.exe"/классы/Пространство имен: хуг schemaforkeywords.xsd структура