比较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);
}
但这只会检查比赛,但我也需要出现。请提出任何建议
答案 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);