4

ソートする必要がある区切り文字列があります。まず、文字列に「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;
    }
4

9 に答える 9

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);
}

私はしばらく Unix の世界にいて、最近は LINQ をあまり使用していないので、私の構文は少しずれているかもしれませんが、お役に立てば幸いです。

于 2013-05-15T14:37:44.077 に答える
2

すべてが1行で実行できます

private string SortFrench(string langs)
{
    return string.Join(" ; ", langs.Split(';').Select(s => s.Trim())
                    .OrderBy(x => x != "Francais")
                    .ThenBy(x => x != "Anglais")
                    .ThenBy(x=>x));
}
于 2013-05-15T14:35:36.520 に答える