我有一个需要分类的分隔字符串.首先,我需要检查'Francais'是否在字符串中,如果是,它首先出现,然后'Anglais'是下一个,如果存在的话.之后,其他一切都按字母顺序排列.谁能帮我?这是我到目前为止所没有的排序
private string SortFrench(string langs)
{
string _frenchLangs = String.Empty;
string retval = String.Empty;
_frenchLangs = string.Join(" ; ",langs.Split(';').Select(s => s.Trim()).ToArray());
if (_frenchLangs.Contains("Francais"))
retval += "Francais";
if (_frenchLangs.Contains("Anglais"))
{
if (retval.Length > 0)
retval += " ; ";
retval += "Anglais";
}
//sort the rest
return retval;
}
Run Code Online (Sandbox Code Playgroud)
Kev*_*son 11
有人喜欢我的评论,所以我想继续把它转换成你的代码:
private string SortFrench(string langs)
{
var sorted = langs.Split(';')
.Select(s => s.Trim())
.OrderByDescending( s => s == "Francais" )
.ThenByDescending( s => s == "Anglais" )
.ThenBy ( s => s )
.ToArray();
return string.Join(" ; ",sorted);
}
Run Code Online (Sandbox Code Playgroud)
我的语法可能略有不同,因为我已经在Unix世界中待了一段时间并且最近没有使用太多的LINQ,但希望它有所帮助.
这就是我想出来的.您可以在Select之后更改.Sort()
for OrderBy(lang => lang)
,但我发现它更干净.
public string SortLanguages(string langs)
{
List<string> languages = langs.Split(';').Select(s => s.Trim()).ToList();
languages.Sort();
PlaceAtFirstPositionIfExists(languages, "anglais");
PlaceAtFirstPositionIfExists(languages, "francais");
return string.Join(" ; ", languages);
}
private void PlaceAtFirstPositionIfExists(IList<string> languages, string language)
{
if (languages.Contains(language))
{
languages.Remove(language);
languages.Insert(0, language);
}
}
Run Code Online (Sandbox Code Playgroud)