Board logo

標題: [發問] 請問如何將陣列中元素將其大小序號寫入第二維中?[已解決] [打印本頁]

作者: asus103    時間: 2011-1-7 17:13     標題: 請問如何將陣列中元素將其大小序號寫入第二維中?[已解決]

本帖最後由 asus103 於 2011-1-8 06:26 編輯

各位大大:
如題
我想將陣列中元素將其大小順序之序號寫入第二維中?
該如何寫?
作者: Hsieh    時間: 2011-1-7 20:43

回復 1# asus103
  1. Sub getarray()
  2. Dim ar(10, 10)
  3. For i = 0 To 9
  4. Randomize
  5.   ar(i, 0) = Rnd '給第一維元素賦值
  6. Next
  7. For i = 0 To 9
  8. s = Application.Match(Application.Large(Application.Index(ar, , 1), i + 1), Application.Index(ar, , 1), 0) - 1 '計算第i+1大的值在第一維的位置
  9. ar(s, 1) = i + 1 ''給第一維元素賦值
  10. Next
  11. [A1].Resize(10, 2) = ar
  12. End Sub
複製代碼

作者: asus103    時間: 2011-1-7 22:53

本帖最後由 asus103 於 2011-1-8 06:31 編輯

回復 2# Hsieh
感謝Hsieh大大
您寫的例子就是我正想要的

想再請教您
如此取亂數有可能重複嗎(預計需要1500個)?
如果要避免亂數值相同,該如何檢驗與處理
謝謝您
作者: Hsieh    時間: 2011-1-8 00:06

回復 3# asus103
會重複,試試看
  1. Sub getarray()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Dim ar(1500, 1500)
  4. Do Until d.Count = 1500
  5. Randomize
  6. x = Rnd
  7. If d.exists(x) = False Then d.Add x, i: ar(i, 0) = x: i = i + 1 '給第一維元素賦值
  8. Loop
  9. ay = Application.Index(ar, , 1)
  10. For i = 0 To 1499
  11. x = Application.Large(ay, i + 1)
  12.   s = Application.Match(x, ay, 0) - 1
  13.   ar(s, 1) = i + 1
  14. Next
  15. [A1].Resize(1500, 2) = ar
  16. End Sub
複製代碼

作者: asus103    時間: 2011-1-8 06:25

回復 4# Hsieh

利用Dictionary來檢查重複,這真是高招
感謝您




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)