提问人:krishna mohan 提问时间:10/26/2023 最后编辑:krishna mohan 更新时间:10/26/2023 访问量:67
如何检查 element 的列表对象是否包含 C 中数组字符串中的字符串#
how to check list object of element contains a string from the array string in C#
问:
如何检查列表对象值是否包含字符串数组的任何字。它适用于“紧急”一词,但如果它带有“紧急 ABC”,那么它就会失败。 Fields 是列表对象。
public class Fields
{
public int _id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
public static string[] urgentWords = {"Urgent","ASAP", "Fast", "Immediately" };
var UrgentText = data.Fields.Where(x => x.Name.ToLower() == "urgent" && urgentWords.Contains(x.Value, StringComparer.InvariantCultureIgnoreCase)).Count();
x.Value 的样本数据 - “Urgent ABC XYZ” //它应该匹配,并且 UrgentText 应该给出 1 x.value 的示例数据 - “尽快审查”它应该匹配 但我们得到 0 个结果,因为它不包含 ABC XYZ
答:
0赞
Dmitry Bychenko
10/26/2023
#1
您当前的代码无法编译;假设您有一个集合(数组、列表)或枚举Field
IEnumerable<Field> data = ...
并且您希望保留项目,以便它们包含属性中的单词,您可以
结合 Linq 和正则表达式:urgentWords
Value
首先,让我们将单词定义为
Unicode 字母的非空序列,不属于另一个单词。
在这种情况下,我们可以使用正则表达式。\p{L}+
其次,让我们有一个更方便的:HashSet<string>
urgentWords
private static readonly HashSet<string> urgentWords = new (StringComparer.OrdinalIgnoreCase)
{
"Urgent", "ASAP", "Fast", "Immediately"
};
然后查询可以是
using System.Linq;
using System.Text.RegularExpressions;
...
var result = data
.Where(item => "urgent".Equals(item.Name, StringComparison.OrdinalIgnoreCase))
.Where(item => Regex
.Matches(item.Value, @"\p{L}+")
.Cast<Match>()
.Any(match => urgentWords.Contains(match.Value)))
.ToArray();
0赞
Denis Micheal
10/26/2023
#2
这
var UrgentText = data.Fields.Where(x => x.Name.ToLower() == "urgent" && urgentWords.Contains(x.Value, StringComparer.InvariantCultureIgnoreCase)).Count();
正在评估
在数据中选择等于“紧急”且数组包含 的任何内容。x.Name
urgentWords
x.value
x.value 的数据 - “尽快审查”它应该匹配,但我们得到 0 结果,因为它不包含 ABC XYZ
什么是“尽快审查”,如果它不等于“紧急”,那么该条件将始终评估为错误。x.name
因此,要么更改为仅检查数组是否包含字符串urgentWords
var UrgentText = data.Fields.Where(urgentWords.Contains(x.Value, StringComparer.InvariantCultureIgnoreCase)).Count();
或将条件从 更改为&&
||
var UrgentText = data.Fields.Where(x => x.Name.ToLower() == "urgent" || urgentWords.Contains(x.Value, StringComparer.InvariantCultureIgnoreCase)).Count();
评论
Where
&
||