ما هي أفضل طريقة للتكرار من خلال مجموعة في Classic Asp VBScript؟

StackOverflow https://stackoverflow.com/questions/2348

  •  08-06-2019
  •  | 
  •  

سؤال

في الكود أدناه

For i = LBound(arr) To UBound(arr)

ما الفائدة من السؤال باستخدام LBound؟بالتأكيد هذا هو دائما 0.

هل كانت مفيدة؟

المحلول

لماذا لا تستخدم For Each؟بهذه الطريقة لا تحتاج إلى الاهتمام بما LBound و UBound نكون.

Dim x, y, z
x = Array(1, 2, 3)

For Each y In x
    z = DoSomethingWith(y)
Next

نصائح أخرى

هناك سبب وجيه لذلك ليس للاستخدام For i = LBound(arr) To UBound(arr)

dim arr(10) يخصص أحد عشر عضوًا في المصفوفة، من 0 إلى 10 (بافتراض قاعدة الخيارات الافتراضية لـ VB6).

يفترض العديد من مبرمجي VB6 أن المصفوفة مبنية على أساس واحد، ولا يستخدمون المصفوفة المخصصة أبدًا arr(0).يمكننا إزالة مصدر محتمل للأخطاء باستخدام For i = 1 To UBound(arr) أو For i = 0 To UBound(arr), لأنه بعد ذلك يكون من الواضح ما إذا كان arr(0) يتم إستخدامه.

For each ينشئ نسخة من كل عنصر من عناصر المصفوفة، بدلاً من المؤشر.

هذا له مشكلتين.

  1. عندما نحاول تعيين قيمة لعنصر مصفوفة، فإن ذلك لا ينعكس على العنصر الأصلي.يعين هذا الكود قيمة 47 للمتغير i, ولكن لا يؤثر على عناصر arr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

  2. نحن لا نعرف فهرس عنصر الصفيف في ملف for each, ، ولا نضمن تسلسل العناصر (على الرغم من أنها تبدو مرتبة).

LBound قد لا يكون دائما 0.

على الرغم من أنه من غير الممكن إنشاء مصفوفة تحتوي على أي شيء آخر غير الحد الأدنى 0 في VBScript، إلا أنه لا يزال من الممكن استرداد مصفوفة من المتغيرات من مكون COM والتي قد تكون حددت نطاقًا مختلفًا LBound.

ومع ذلك، لم يسبق لي أن واجهت شخصًا فعل شيئًا كهذا.

ربما يأتي من VB6.لأنه مع قاعدة الخيار في VB6، يمكنك تغيير الحد الأدنى للمصفوفات مثل هذا:

Option Base 1

أيضًا في VB6، يمكنك تغيير الحد الأدنى لمصفوفة معينة مثل هذا:

Dim myArray(4 To 42) As String

لقد استخدمت دائمًا لكل ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top