如何检查 element 的列表对象是否包含 C 中数组字符串中的字符串#

how to check list object of element contains a string from the array string in C#

提问人:krishna mohan 提问时间:10/26/2023 最后编辑:krishna mohan 更新时间:10/26/2023 访问量:67

问:

如何检查列表对象值是否包含字符串数组的任何字。它适用于“紧急”一词,但如果它带有“紧急 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

c# 列表 LINQ List对象

评论

0赞 Denis Micheal 10/26/2023
你的不完整,你是在做还是?Where&||

答:

0赞 Dmitry Bychenko 10/26/2023 #1

您当前的代码无法编译;假设您有一个集合(数组、列表)或枚举Field

IEnumerable<Field> data = ...

并且您希望保留项目,以便它们包含属性中的单词,您可以 结合 Linq 和正则表达式:urgentWordsValue

首先,让我们将单词定义为

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.NameurgentWordsx.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();