C# 确定关键字周围单词的有效方法是什么?
例如: 您有一个字符串,如C# 确定关键字周围单词的有效方法是什么?,c#,C#,例如: 您有一个字符串,如var str=“Pete很棒,John很高兴,Pete在这里”。 关键字是单词is。 然后我希望输出是一个包含两个元组的数组,如中所示 [(Pete,(great,here)),(John,happy)] 现在,我将从IndexOf开始,转到Substring并以foreach结束,然后修改创建一个新类来存储中间的子数组(在示例中,这里是) 关于代码行和内存/cpu的有效方法是什么?也许这种方法足以满足您的需求。为您的搜索结果创建一个类: public class
var str=“Pete很棒,John很高兴,Pete在这里”代码>。
关键字是单词is
。
然后我希望输出是一个包含两个元组的数组,如中所示
[(Pete,(great,here)),(John,happy)]
现在,我将从IndexOf
开始,转到Substring
并以foreach
结束,然后修改创建一个新类来存储中间的子数组(在示例中,这里是)
关于代码行和内存/cpu的有效方法是什么?也许这种方法足以满足您的需求。为您的搜索结果创建一个类
:
public class SearchResult
{
public string Identifier { get; set; }
public IList<string> Descriptions { get; set; }
public IList<int> Indexes { get; set; }
}
结果(LinqPad):
您可能需要在拆分数组中添加标点符号,如[,;:!?]
等
如果不想使用LINQ,请在循环中填写字典
var str = "Pete is great and John is happy and Pete is here";
string[] words = str.Split(new string[0], StringSplitOptions.RemoveEmptyEntries);
SearchResult[] results = words
.Select((w, ix) => (Word: w, Index: ix))
.Where(x => x.Word.Equals("is", StringComparison.CurrentCultureIgnoreCase) && x.Index > 0 && x.Index < words.Length-1)
.Select(x => (Identifier: words[x.Index - 1], Description: words[x.Index + 1], x.Index))
.GroupBy(x => x.Identifier)
.Select(g => new SearchResult
{
Identifier = g.Key,
Indexes = g.Select(x => x.Index).ToArray(),
Descriptions = g.Select(x => x.Description).ToArray()
})
.ToArray();