文字列から一意の文字を抽出したい。たとえば、 - 'AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ'
が返されます'ABCFGDJ'
文字列から一意の文字を取得するには?
私は以下のコードを試しましたが、今は最適化したいと思います。 誰かが知っていることをお勧めします。
static string extract(string original)
{
List<char> characters = new List<char>();
string unique = string.Empty;
foreach (char letter in original.ToCharArray())
{
if (!characters.Contains(letter))
{
characters.Add(letter);
}
}
foreach (char letter in characters)
{
unique += letter;
}
return unique;
}
"私はそれを最適化したい" - なぜですか?プロファイリング中に見つけたパフォーマンスのボトルネックですか? – Oded
パフォーマンスのボトルネックではありませんが、私が得ることができれば、より最適なソリューションを探していました。 –
@Oded Rahulが正しいです。ループで繰り返し文字列連結を使用すると、パフォーマンスが低下することはよく知られています。これは 'StringBuilder'のもっとも重要な使用例の1つです。また、 'List'の 'Contains'メソッドを使用するのは比較的非効率的です。これは 'HashSet 'の最も重要なユースケースの1つです。コードは 'List 'の代わりに 'HashSet 'を使用し、 'StringBuilder'に' unique'を変更する方がはるかに効率的です。しかし、linqの方が優れています。効率的に動作します。*コード化するのがより簡単で簡単です。 –
phoog