1

文字列の説明語ベースを削除する方法がありますが、これを行うにはもっと効率的な方法があると思います。

ファットオークローグiMonsterようなもので、ファットを取り除きたいです。

    private static string[] _adjectives = { "angry", 
                                            "big", 
                                            "fat", 
                                            "happy",
                                            "large", 
                                            "nasty", 
                                            "fierce", 
                                            "thin",
                                            "small", 
                                            "tall", 
                                            "short" };

    private static string RemoveMonsterAdjective(string iMonster)
    {
        foreach (string adjective in _adjectives)
        {
            if (iMonster.Contains(adjective))
            {
                iMonster = iMonster.Replace(adjective, "").Trim();
                break;
            }
        }
        return iMonster;
    }

うまくいけば、誰かが私を助けることができます。前もって感謝します。

4

2 に答える 2

5

次のような正規表現を使用して、1回の呼び出しですべての置換を実行できます。

return Regex.Replace(
    iMonster,
    @"\b(angry|big|fat|happy|...)\b",
    ""
).Trim();

このアプローチの背後にある考え方は、形容詞を1つの単語として一致させる正規表現を作成し(「bigot」は一致せず、「big」は一致する)、その単語を空の文字列に置き換えることです。

これがideoneのデモです。

于 2013-01-05T17:46:13.500 に答える
4

別の可能な短い解決策は次のとおりです。

var words = iMonster.Split(' ');
return string.Join(" ", words.Except(_adjectives));

私はいくつかのプロファイリングを行い、さまざまなソリューションを比較しました。

入力fat angry orc happy rogueと1000000回の反復の場合:

00:00:01.8457067 lakedoo
00:00:01.9772477 Eve
00:00:04.3859120 dasblinkenlight

dasblinkenlightのソリューションを、正規表現にすべての形容詞を含めるように適合させたことに言及する必要があります。

編集:ブレークを削除することにより、lakedooのメソッドを修正しました。

于 2013-01-05T18:00:56.543 に答える