Каков наилучший способ конвертировать MatchCollection в HashSet? - PullRequest
2 голосов
/ 26 июня 2011

У меня есть следующий код для извлечения определенных токенов из входного файла

string sLine = File.ReadAllText(ituffFile);
Regex rxp = new Regex(@"2_tname_(?<token>\S+)", RegexOptions.Compiled);
MatchCollection rxpMatches = rxp.Matches(sLine);

Теперь я хочу преобразовать MatchCollection, который содержит элементы, которые я ищу, в HashSet.

Какой самый быстрый способ добиться этого?

Является ли следующий способ лучшим?

HashSet<string> vTnames = new HashSet<string>();
foreach (Match mtch in rxpMatches)
{
    vTnames.Add(mtch.Groups["token"].Value);
}

Ответы [ 2 ]

2 голосов
/ 26 июня 2011

Да, по-моему, ваш код идеален, потому что для MatchCollection в HastSet нет подходящего приведения типов. Таким образом, то, как вы следите, используя цикл foreach, идеально.

1 голос
/ 26 июня 2011

Если вы ищете выражение Linq-to-objects:

Regex rxp = new Regex(@"2_tname_(?<token>\S+)", RegexOptions.Compiled);
MatchCollection rxpMatches = rxp.Matches(sLine);
HashSet<string> vTnames = 
  rxpMatches.Cast<Match> ().Aggregate (
    new HashSet<string> (),
    (set, m) => {set.Add (m.Groups["token"].Value); return set;});

Конечно, решение foreach немного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...