比较两个逗号分隔的字符串并获取相交值的计数

时间:2014-07-09 17:21:50

标签: linq string-comparison

比较2个逗号分隔的字符串和检索相交的值的最佳代码是什么?例如,假设我有字符串“a,b,c”和目标字符串“x,b,y”,我需要结果说有1次出现。

正如所建议here这样做的一种方法是

public static bool UserCanAccessThisPage(string userAccessGroups,
    string pageItemAccessGroups)
{
    return userAccessGroups.Split(',')
                           .Select(s => s.Trim())
                           .Contains(pageItemAccessGroups);
}

但这只会检查比赛,但我也需要出现。请提出任何建议

1 个答案:

答案 0 :(得分:2)

使用Enumerable.Intersect获取两个序列的交集:

var occurrences = 
    userAccessGroups.Split(',').Select(s => s.Trim())
         .Intersect(pageItemAccessGroups.Split(',').Select(s => s.Trim()));

检查是否存在事件:

bool exist = occurrences.Any();

计算出现次数:

int count = occurrences.Count();

为了使代码更具可读性,您可以将组存储在局部变量中:

 // this can be ordinal named method
 Func<string, IEnumerable<string>> parse = 
     csv => csv.Split(',').Select(s => s.Trim());

 var userGroups = parse(userAccessGroups);
 var pateItemGroups = parse(pageItemAccessGroups);
 var occurrences = userGroups.Intersect(pageItemGroups);