将MatchCollection转换为HashSet的最佳方法是什么?

时间:2011-06-26 11:37:20

标签: c#-4.0

我有以下代码从输入文件中提取特定标记

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 个答案:

答案 0 :(得分:2)

是的,根据我的说法,你的代码是完美的,因为MatchCollection和HastSet似乎没有任何合适的强制转换。所以你跟随使用foreach循环的方式是完美的..

答案 1 :(得分:1)

如果您正在寻找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解决方案要快一点。