我有一个这样的参数列表:
public class parameter
{
public string name {get; set;}
public string paramtype {get; set;}
public string source {get; set;}
}
IEnumerable<Parameter> parameters;
我想检查一个字符串数组。
string[] myStrings = new string[] { "one", "two"};
我想迭代参数列表并检查 source 属性是否等于任何 myStrings 数组。我可以使用嵌套的 foreach 来做到这一点,但我想学习如何以更好的方式做到这一点,因为我一直在使用 linq 并且喜欢可枚举的扩展方法,例如 where 等,所以嵌套的 foreach 感觉不对。是否有更优雅的首选 linq/lambda/delegete 方法来执行此操作。
Thanks
你可以使用嵌套Any()
对于此检查,可在任何Enumerable
:
bool hasMatch = myStrings.Any(x => parameters.Any(y => y.source == x));
在更大的集合上更快地执行将是项目parameters
to source
然后使用Intersect
它内部使用一个HashSet<T>
因此,您可以在 O(n) 中进行检查,而不是第一种方法的 O(n^2) (相当于两个嵌套循环):
bool hasMatch = parameters.Select(x => x.source)
.Intersect(myStrings)
.Any();
另外,作为附带注释,您应该将类名称和属性名称大写,以符合 C# 样式指南。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)