iT邦幫忙

0

[Visual Basic 陣列] 與 [Python列表]問題探討

普通寫法

#Python編寫:
a = []
for x in range(21):
    if x%2==0:
        a.append(x)
print(a)
'Visual Basic編寫:
Sub main()
    Dim so As New ArrayList
    For x = 0 To 20
        If x Mod 2 = 0 Then
            so.Add(x)
        End If
    Next
End Sub

運行結果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]


高級寫法

#Python List comprehension寫法:
a = [x for x in range(21) if x%2==0]
print(a)
'Visual Basic
??????
    1. 使用VB做得到類似Python的List comprehension寫法嗎?
    1. VB除了普通寫法,還有其他更好的寫法嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
japhenchen
iT邦超人 1 級 ‧ 2019-07-10 07:52:45
最佳解答

YES

用VB.net版的LAMBDA


    Sub Main()
        Dim alist(100) As Int32   '弄一個100維度的陣列
        For i = 1 To 100
            alist(i) = i  ' 塞預設值
        Next

        For Each a In alist.Where(Function(x) x Mod 2 = 0) ' 只列出除以2餘0的數字(偶數)
            Console.WriteLine(a)
        Next

    End Sub


https://ithelp.ithome.com.tw/upload/images/20190710/20117954ubNtqS6lQ6.jpg

但如果是VB6、VBA這類的話,那......不支援

2
paicheng0111
iT邦大師 5 級 ‧ 2019-07-09 15:22:39

NO, 用VB不行。

但用EXCEL VBA可以做出類似的效果。

Sub test()
    Dim a As Variant, myRng As Range, i As Long
    
    Set myRng = Range(Cells(1, 1), Cells(10, 1))
    
    myRng.FormulaR1C1 = "=row()*2"
    a = Application.Transpose(myRng)
    
    For i = LBound(a) To UBound(a)
        Debug.Print (a(i))
    Next i
End Sub
2
小魚
iT邦大師 1 級 ‧ 2019-07-09 18:20:27

Python不熟, 不過我猜你的需求是不是這樣
https://ithelp.ithome.com.tw/upload/images/20190709/20105694mtD1Ka5HJf.png

以下是C#的寫法,要轉成VB的應該也不難

Random rnd = new Random();
List<int> list = Enumerable.Range(1, 50).OrderBy(n => rnd.Next()).ToList();
list = list.Select(x => x * 2).ToList();
for (int i = 0; i < list.Count; i++)
    Console.Write($"{list[i]} ");
froce iT邦大師 1 級 ‧ 2019-07-09 19:08:39 檢舉

不對,他要的很簡單,就0到100中的偶數而已。
不過VB沒有。
然後我很訝異VB和python居然是同年誕生的語言。

小魚 iT邦大師 1 級 ‧ 2019-07-09 19:34:45 檢舉

我寫的不就是0~100的偶數嗎?
如果是要照順序排就把OrderBy拿掉就好了.

但是Basic應該是很早就有的語言吧,
跟C語言差不多了.

我要發表回答

立即登入回答