1

Listオブジェクトがあり、重複したアイテムを削除したいのですが、重複したアイテムの少なくとも1つをリストに残します。

私はこのようなものを書きましたが、パフォーマンスを向上させるためにこのコードを最適化しますが、もっと速いものはありますか?

Const chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Dim rnd As New Random()
Dim mylist As List(Of String) = Enumerable.Range(1, 100).Select(Function(i) chars(rnd.Next(0, chars.Length)).ToString).ToList

For n As Integer = mylist.Count - 1 To n = 0 Step -1

    'remove the item if it's duplicated
    'but leave at least one of the duplicated items in the list
    If mylist.IndexOf(mylist.Item(n), 0) < n Then
        mylist.RemoveAt(n)
    End If

Next
4

3 に答える 3

6

やってみました .Distinct()

Dim stringWithChars As String = "AABBCCDDEEFFaabbccddeeff"
Dim res = stringWithChars.Distinct() // ABCDEFabcdef

編集:使用するフレームワークを言わなかったので、Linq(.NET 3.5 +)を使用できると思います

于 2012-03-27T14:56:29.320 に答える
2

アレックスが提案したように文字列で機能するかどうかはわかりませんDistinctが、別の解決策は、を呼び出す前に文字列を char 配列に変換することDistinctです。次に例を示します。

var test = "abcdefggabc";

test = new string(test.ToCharArray().Distinct().ToArray());

編集: アレックスは文字列でこれをテストし、それが機能するため、どちらのソリューションも機能します。

LINQ に代わるものを探している場合は、正規表現でもこれを実現できるはずです。このようなものがうまくいくかもしれません:

var test = Regex.Replace("JJJJJ DDDD KK  YYYYY", @"(.)(\1)+", "$1");
于 2012-03-27T15:02:53.310 に答える
1

リストの代わりにHashSetを使用できますか?

于 2012-03-27T15:00:46.500 に答える