質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

8007閲覧

VB.netで複数キーによるソートを行いたい

swordfish3345

総合スコア2

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2022/02/27 12:57

Listに格納されたClassのメンバ変数でのソートを行いたいのですが
メンバ変数1は第1キーで降順ソートとし、メンバ変数2は第2キーとして
昇順ソートを行いたいのですが、
実装方法が分かりません

【例】
'クラス例
Class Info
'日付
dim date as string
'名称
dim name as string
'種別コード
dim kind as string
End Class

'Class Info 格納用List
Dim InfoList As New List(Of Info)

’繰り返しListに詰める
For each
Dim obj as Info = new Info()
'システム日付
obj.date = "20220301"
’名称
obj.name = "種類A"
’種別コード
obj.Kind = "001"

InfoList .Add(obj)

Next

Listのなかには、下記のような状態でClass Info が格納されているとした場合、

List(0)
date:20220206
name:種類A
kind:001

List(1)
date:20220125
name:種類C
kind:003

List(2)
date:20220125
name:種類B
kind:002

dateは第1キーとして、降順ソート、第2キーとして、kindは昇順ソートで並び替えということは可能でしょうか?
※SQLのorder by句のdesc ascの組み合わせによるソートを行いたいです。

※望むソート結果

date:20220206
name:種類A
kind:001

date:20220125
name:種類B
kind:002

date:20220125
name:種類C
kind:003

VB.net はまだ、使い始めのため、至らない点はあるかと思いますが
ご助力お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/02/27 13:46

ASP.NET のタグがついてますがどういう関係があるのですか?
退会済みユーザー

退会済みユーザー

2022/02/28 00:59

質問者さん無言ですが、前のスレッドの ASP.NET Web Forms アプリの話で、例えば GridView に表示される一覧をソートしたいとかいう ASP.NET と関係する話と、単に VB.NET のコーディングに限った話とでは答えが違ってくるので、ちゃんと質問に答えましょう。
guest

回答1

0

ベストアンサー

Linq を学ぶと楽に書けますよ。

コード

vbnet

1Public Class Form1 2 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 3 Dim infoList As New List(Of Info) 4 infoList.Add(New Info("20220125", "C", "025")) 5 infoList.Add(New Info("20220206", "X", "150")) 6 infoList.Add(New Info("20220125", "B", "001")) 7 8 Debug.WriteLine("=== 初期状態 ===") 9 infoList.ForEach(Sub(i) Debug.WriteLine(i.ToString())) 10 Debug.WriteLine("=== ソート後 ===") 11 infoList.OrderByDescending(Function(i) i.strDate). 12 ThenBy(Function(i) i.name).ToList(). 13 ForEach(Sub(i) Debug.WriteLine(i.ToString())) 14 End Sub 15End Class

vbnet

1Class Info 2 Public strDate As String 3 Public name As String 4 Public kind As String 5 6 Sub New(strDate As String, name As String, kind As String) 7 Me.strDate = strDate 8 Me.name = name 9 Me.kind = kind 10 End Sub 11 12 Public Overrides Function ToString() As String 13 ToString = strDate & ", " & name & ", " & kind 14 End Function 15End Class

結果

text

1=== 初期状態 === 220220125, C, 025 320220206, X, 150 420220125, B, 001 5=== ソート後 === 620220206, X, 150 720220125, B, 001 820220125, C, 025

投稿2022/02/27 13:51

bboydaisuke

総合スコア5270

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordfish3345

2022/02/28 22:26

返信が遅くなり申し訳ありません。 実装例も提示いただき、ありがとうございました。 頂いた内容で試してみたいと思います。 非常に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問