配列内のNothingを削除したい

タグの編集
投稿者 soso  (社会人) 投稿日時 2021/11/4 15:18:11
VB.NETの配列処理についての質問です。
a(0) = 100
a(1) = 200
a(2) = 300
a(3) = Nothing
a(4) = Nothing

という配列がある場合、a(3),a(4)のNothingを除去したいのですが、どのような方法があるでしょうか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/11/4 15:50:05
そもそも、配列の a の型が何であるのかを教えてください。
Dim a() As Integer だった…なんて事は無いですよね?

' Object 型の配列だった場合 
Dim a As Object() = {100, 200, 300, Nothing, Nothing}
a = a.Where(Function(o) o IsNot Nothing).ToArray()

' Integer? 型の配列だった場合 
Dim a As Integer?() = {100, 200, 300, Nothing, Nothing}
a = a.Where(Function(i) i.HasValue).ToArray()

' String 型の配列だった場合 
Dim a As String() = {"100""200""300"Nothing, Nothing}
a = a.Where(Function(s) Not String.IsNullOrWhiteSpace(s)).ToArray()
投稿者 soso  (社会人) 投稿日時 2021/11/8 18:15:05
魔界の仮面弁士様

配列はString型で、回答いただいた内容で解決できました!
投稿者 るきお  (社会人) 投稿日時 2021/11/8 20:03:15
Stringの配列であれば、こんな手もありますよ。参考までに。

Dim a As String() = {"100""200""300"Nothing, Nothing}
a = a.OfType(Of String).ToArray


短く書けはするけど、どうかな…。ちょっとわかりくくて敬遠しちゃうかもしれませんね。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/11/8 20:53:07
> 配列はString型で、回答いただいた内容で解決できました!

本当に IsNullOrWhiteSpace で良いのかどうか、もう一度確認しておいてください。

Nothing だけ除去したい → 「s IsNot Nothing」または「Not s Is Nothing」または「Not IsNothing(s)」
Nothing だけではなく "" も除去 → 「Not String.IsNullOrEmpty(s)」
Nothing と "" の他、空白のみの文字列も除去 → 「Not String.IsNullOrWhiteSpace(s)」


ここでいう「空白」とは、いわゆる半角空白だけではなく、改行や全角空白など多岐にわたります。
https://docs.microsoft.com/ja-jp/dotnet/api/system.char.iswhitespace