言語:Visual Basic 2005
以下に示すコードにより、構造体のソートを行いましたが、1回目と2回目で異なる結果となってしまい困っています。
具体的には、"東証1部"という要素を持っている構造体変数が2つありますが、.netのソートは同じ変数がある場合、入れ替えをやってしまうようなのです。(間違っていたらすみません。)
下記のコードで自前のソートクラスmyCompareのところでコメントを入れたところを-1にすれば、希望の動作を実現できると思っていましたが、この場合はなぜかエラーとなってしまい、お手上げ状態で困っています。
本件どなたかご存知の方がおられましたら教えていただけないでしょうか。
よろしくお願いします。
Public Class Class1
Public Shared HashTB As New Hashtable
Public Shared SortKey As String
Public Structure myStockCode
Public StockCode As Integer
Public StockName As String
Public Market As String
Public Num_Market As Integer
End Structure
Private Class myCompare
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
If CType(x, myStockCode).Num_Market = CType(y, myStockCode).Num_Market Then
Return 0 '<--- ここを-1としたいがエラーとなってできない
End If
If CType(x, myStockCode).Num_Market < CType(y, myStockCode).Num_Market Then
Return -1
Else
Return 1
End If
End Function
End Class
Public StockCode(3) As myStockCode
Public Sub New()
StockCode(0).StockCode = 1378
StockCode(0).StockName = "雪国"
StockCode(0).Market = "東証1部"
StockCode(1).StockCode = 2683
StockCode(1).StockName = "魚喜"
StockCode(1).Market = "東証2部"
StockCode(2).StockCode = 2742
StockCode(2).StockName = "ハローズ"
StockCode(2).Market = "JASD"
StockCode(3).StockCode = 1301
StockCode(3).StockName = "極洋"
StockCode(3).Market = "東証1部"
HashTB("東証1部") = 1
HashTB("東証2部") = 2
HashTB("JASD") = 3
Dim i As Integer
For i = 0 To 3
StockCode(i).Num_Market = CType(HashTB(StockCode(i).Market), Integer)
Next
End Sub
Public Sub show1()
Dim objmyCompare As New myCompare
Dim outstr As String
Dim i As Integer
'1回目のソート
outstr = ""
System.Array.Sort(StockCode, objmyCompare)
For i = 0 To 3
outstr = outstr & StockCode(i).StockCode & " " & StockCode(i).StockName & " " & StockCode(i).Market & " " & StockCode(i).Num_Market & vbCrLf
Next
outstr += vbCrLf
'2回目のソート
System.Array.Sort(StockCode, objmyCompare)
For i = 0 To 3
outstr = outstr & StockCode(i).StockCode & " " & StockCode(i).StockName & " " & StockCode(i).Market & " " & StockCode(i).Num_Market & vbCrLf
Next
outstr += vbCrLf
'3回目のソート
System.Array.Sort(StockCode, objmyCompare)
For i = 0 To 3
outstr = outstr & StockCode(i).StockCode & " " & StockCode(i).StockName & " " & StockCode(i).Market & " " & StockCode(i).Num_Market & vbCrLf
Next
outstr += vbCrLf
MsgBox(outstr)
End Sub
End Class
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=691978&SiteID=7
で話が進んでいるようです。
※マルチポスト(同じ質問を違う掲示板にする行為)は一般的にはマナー違反で嫌われる行為です。
やってしまったことはしょうがないので、きちんとどちらの掲示板にもどのようにして解決に
いたったのかを報告してください。(これをやらない輩が多いから、嫌われるわけで)
すみません。失礼いたしました。
今後は気をつけたいと思います。
Blueさんにつけていただいたリンクで解決いたしました。
お騒がせしました。
解決しました。
>きちんとどちらの掲示板にもどのようにして解決にいたったのかを報告してください
「リンク先を見なくても、どのように解決したのか、この掲示板だけで完結させてください」
ということでしたが。
(リンク先をいちいち見に行ってくださいってのはダメ。参照できなくなったりするし、面倒でしょ?)
ツイート | ![]() |