ما هي أفضل طريقة للتكرار من خلال مجموعة في Classic Asp VBScript؟
-
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
ينشئ نسخة من كل عنصر من عناصر المصفوفة، بدلاً من المؤشر.
هذا له مشكلتين.
عندما نحاول تعيين قيمة لعنصر مصفوفة، فإن ذلك لا ينعكس على العنصر الأصلي.يعين هذا الكود قيمة 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
نحن لا نعرف فهرس عنصر الصفيف في ملف
for each
, ، ولا نضمن تسلسل العناصر (على الرغم من أنها تبدو مرتبة).
LBound
قد لا يكون دائما 0.
على الرغم من أنه من غير الممكن إنشاء مصفوفة تحتوي على أي شيء آخر غير الحد الأدنى 0 في VBScript، إلا أنه لا يزال من الممكن استرداد مصفوفة من المتغيرات من مكون COM والتي قد تكون حددت نطاقًا مختلفًا LBound
.
ومع ذلك، لم يسبق لي أن واجهت شخصًا فعل شيئًا كهذا.
ربما يأتي من VB6.لأنه مع قاعدة الخيار في VB6، يمكنك تغيير الحد الأدنى للمصفوفات مثل هذا:
Option Base 1
أيضًا في VB6، يمكنك تغيير الحد الأدنى لمصفوفة معينة مثل هذا:
Dim myArray(4 To 42) As String
لقد استخدمت دائمًا لكل ...