- PR -

ArrayListのソートについて

1
投稿者投稿内容
ほりかず
常連さん
会議室デビュー日: 2003/01/29
投稿数: 26
投稿日時: 2009-01-22 09:35
お世話になります。

VB.NETでArrayListにCSVファイルから取得した多項目のデータを保存し、
ソートをしようと考えています。
今回は事情があってDataTable等が使用できません。

ソートを考えた保存方法として、
ArrayListにクラス配列(エンティティ)を追加する方法と、
構造体を追加する方法の2つを考えましたが、
他に良い方法があったら教えてください。

また、ArrayList.Sort()で単純にソートすると、
特にクラス配列が追加されている場合、
ソート順はどのようにソートされるのでしょうか?

何方かご教授頂けます様、よろしくお願い致します。
ヴァン
常連さん
会議室デビュー日: 2008/03/04
投稿数: 28
投稿日時: 2009-01-22 10:12
こんにちは

こちらはご覧になりましたか?

http://msdn.microsoft.com/ja-jp/library/system.icomparable.aspx?ppud=4

ソートの条件は自分で実装できます。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2009-01-22 10:12
引用:

ArrayListにクラス配列(エンティティ)を追加する方法と、


これでいいんじゃないですかね。
2005 以降なら ArrayList よりも List(Of T) を使うべきですが。
ん? クラス配列? 配列ってどういうことでしょうか? String の配列ってこと?

引用:

また、ArrayList.Sort()で単純にソートすると、
特にクラス配列が追加されている場合、
ソート順はどのようにソートされるのでしょうか?


要素に IComparable が実装されておらず IComparer も指定しない場合例外が投げられます。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2009-01-22 10:27
VB.NET のバージョンはいくつになりますか?
VB 2005 以降ならば、ArrayList よりも List<T> (System.Collections.Generics) を使った方が良いです。


> クラス配列(エンティティ)
これが何を指しているのかがよくわかりません。
直後に構造体が挙がっていることからすると、単にクラスのことを言っているのでしょうか。


> また、ArrayList.Sort()で単純にソートすると、
> 特にクラス配列が追加されている場合、
> ソート順はどのようにソートされるのでしょうか?

ArrayList.Sort() のソート順は、要素の IComparable の実装に従います。IComparable を実装していない場合はソートできません。
ArrayList.Sort(IComparer) の場合は、受け取った IComparer の実装に従います。
_________________
C#と諸々
ほりかず
常連さん
会議室デビュー日: 2003/01/29
投稿数: 26
投稿日時: 2009-01-22 10:41
早速の回答ありがとうございます。

>Hongliang様
残念ながら2003を使用しています。

>クラス配列
表現の仕方が悪かったです。
Stringの配列です。


ちなみに構造体で
 Private Structure Person
Public Name As String
Public Age As Integer
Public Sub setPerson(ByVal n As String, ByVal a As Integer)
Name = n
Age = a
End Sub
 End Structure
を定義して、ArrayListに追加した場合、
ArrayList.Sort()でも例外は発生してしまうのでしょうか?


当方の無知で見当外れな質問かも知れませんが、
なにとぞよろしくお願い致します。

以上
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2009-01-22 11:00
引用:

ちなみに構造体で
 Private Structure Person
Public Name As String
Public Age As Integer
Public Sub setPerson(ByVal n As String, ByVal a As Integer)
Name = n
Age = a
End Sub
 End Structure
を定義して、ArrayListに追加した場合、
ArrayList.Sort()でも例外は発生してしまうのでしょうか?


はい。この構造体は Implements IComparable をやってませんからね。

ところで Structure を使うのはできる限り避けてください。Class の方がほとんどの場合に優れています。
この場合、Structure Person ではなく Class Person を ArrayList に追加していくのが良いでしょう。
ほりかず
常連さん
会議室デビュー日: 2003/01/29
投稿数: 26
投稿日時: 2009-01-22 19:50
ありがとうございました。
もう少し勉強してみます。
1

スキルアップ/キャリアアップ(JOB@IT)