如何根据 C# 中字符串中元素的出现次数对数组进行排序

本文关键字:数组 排序 何根 字符串 元素 | 更新日期: 2023-09-27 18:35:48

>我有一个数组

string [] country = {"IND", "RSA", "NZ", "AUS", "WI", "SL", "ENG", "BAN"};

我有一个字符串

downloadString = "The match between India (IND) and Australia (AUS) is into its exciting phase. South Africa (RSA) won the match against England (ENG) "

所以我试图找到字符串中存在哪些数组元素。我能够发现字符串中存在INDRSAAUSENG。但是,我无法根据它们在字符串中的出现对它们进行排序。所以现在我得到的输出是

IND, RSA, AUS, ENG

然而,我真正需要的是

IND, AUS, RSA, ENG

我该怎么做?

如何根据 C# 中字符串中元素的出现次数对数组进行排序

另一种可能性是使用以下模式的正则表达式:

'b(IND|RSA|NZ|AUS|WI|SL|ENG|BAN)'b

演示

示例代码:(未经测试)

MatchCollection matches= System.Text.RegularExpresssion.Regex.Matches(yourStringSample, patternHere);
for each (Match m in matches)
{
   Debug.Print(m.ToString())
}

希望对您有所帮助!

编辑:

根据下面的评论,我应该强调正则表达式模式应该使用类似的代码构建,如下所示:(如JLRishe所建议的)

string pattern = "(" + string.Join("|", country.Select(c => Regex.Escape(c))) + ")"
您可以使用

Linq 查询简洁地执行此操作(我已将您的原始数组重命名为 countries ):

var result = countries.Select(country => new { country, 
                                               index = downloadString.IndexOf(country)})
                      .Where(pair => pair.index >= 0)
                      .OrderBy(pair => pair.index)
                      .Select(pair => pair.country)
                      .ToArray();

结果是 IND, AUS, RSA, ENG .

您可以搜索字符串并保持找到的项目的位置,然后根据它们在字符串中的位置对它们进行排序。您可能需要一个结构数组来保留标签和位置,而不是国家/地区数组!