私はSaveFileというカスタムクラスを持っています。それが持つ1つのプロパティはSaveNumberであり、そのプロパティでリストをソートしようとしています。私はここで記事の束を読んで、それを適切に分類するようにしましたが、それは早い段階で止まっていますか?私が気づいたのは79セーブのセットです。 1、2、3、4、5、6、7、10、11、... 30、8、31、... 70、9、71、..ソートコード:ソートリスト(Of T)が早く中止する
saveList.Sort(Function(x, y) x.CompareTo(y)
)
しかし、私は、コードを使用する場合:
For i = 0 To 3
saveList.Sort(Function(x, y) x.CompareTo(y))
Next
それは右のソートが、それは非常に長い時間がかかり、1セットが、それは私のプログラムのために、ほぼ5分かかりますので、その中の700以上のセーブファイルを持っていますロードする。何か案は?
これは私が私のCompareTo機能を持っているコードされています。それはチャンスの誰かが両方への答えを知って減少するため、
Public Function CompareTo(y As SaveFile) As Integer Implements IComparable(Of SaveFile).CompareTo
'If neither are an autosave then compare save number
If Not Me.Text.StartsWith("autosave") And Not y.Text.StartsWith("autosave") Then
If Me.SaveNumber.ToString.Length > y.SaveNumber.ToString.Length Then
Return False
ElseIf Me.SaveNumber.ToString.Length < y.SaveNumber.ToString.Length Then
Return True
End If
Return Me.SaveNumber < y.SaveNumber
'if either is an autosave
Else
'Create to comparable integers with
'a value of 4. We set the value to
'4 because it is higher than the 3
'available autosaves, making it sort
'after any autosaves if only one is
'an autosave.
Dim xComp As Integer = 4
Dim yComp As Integer = 4
'If x is an autosave then figure out
'which autosave number it is.
If Me.Text.StartsWith("autosave") Then
Select Case True
Case Me.Text.EndsWith("1")
xComp = 1
Case Me.Text.EndsWith("2")
xComp = 2
Case Me.Text.EndsWith("3")
xComp = 3
End Select
End If
'if y is an autosave then figure out
'which autosave number it Is.
If y.Text.StartsWith("autosave") Then
Select Case True
Case y.Text.EndsWith("1")
yComp = 1
Case y.Text.EndsWith("2")
yComp = 2
Case y.Text.EndsWith("3")
yComp = 3
End Select
End If
Return xComp < yComp
End If
End Function
これは実際に非常に役に立ちます。長さの比較は、19歳から20歳の間に2人にうんざりしていたためです。CompareToを説明してくれてありがとう。私はそれを理解しようとしてきました。私はこのプログラムを書いているので、私は一種の学びです。今私はそれをもっとよく理解していると思います。どうもありがとうございます! –
ああ、私はCompareToを(私が知る限り)行う必要があることを忘れていた。なぜなら、自動セーバーは絶対に上になければならないからだ。 –
2が19と20の間に表示されている場合は、番号の形式でソートしています。 [ascii値](http://www.asciitable.com/)ごとに2> 1なので、 '' 2 "'は '' 19 ''以上です。あなたはNatural Sortを使うことができますが、私はあなたが望むように "auto"のものが出てこないと思っています。自動保存couildはorderbyを使用して行うこともできますが、比較メソッド(IComparableである必要はありません)によって、より洗練されたコードが作成されます。 – Plutonix