Первое, что я хотел бы сделать, это преобразовать массивы в обобщенные c списки. Итак, это:
Dim TempSubject() As String = {"Maths","English","Sanskrit","Sanskrit","Urdu","Urdu","Urdu","French","French","French","Physical Education","Physical Education","Game","Game", "Science"}
Dim friRoutine() As String
Получается так:
Dim TempSubject As New List(Of String) From {"Maths","English","Sanskrit","Sanskrit","Urdu","Urdu","Urdu","French","French","French","Physical Education","Physical Education","Game","Game", "Science"}
Dim friRoutine As New List(Of String)(6)
Вы можете получить доступ к элементам в этих списках по индексу, как с массивами, но теперь он становится MUCH проще делать такие вещи, как добавлять или удалять записи. По крайней мере , я бы сделал это для коллекции friRoutine
; есть некоторый аргумент для массива таким образом, что TempSubject
используется в этом коде, но даже там данные, скорее всего, пришли куда-то, что вместо этого могло бы оправдать List (Of String).
Это сделано, вы Можно значительно упростить код:
friRoutine.AddRange(TempSubject)
friRoutine = friRoutine.Distinct().Take(7).ToList()
Или, чтобы показать весь образец:
Dim TempSubject = {"Maths","English","Sanskrit","Sanskrit","Urdu","Urdu","Urdu","French","French","French","Physical Education","Physical Education","Game","Game", "Science"}
Dim friRoutine As New List(Of String)(TempSubject.Distinct().Take(7))
For i As Integer = 0 to friRoutine.Count - 1
Debug.WriteLine($"Friday: {i} : {friRoutine(i)}")
Next
И теперь, когда мы видим данные для friRoutine
можно вычисляется из одной строки кода, возникает вопрос: а нужна ли нам вообще отдельная коллекция?
Что касается исходного кода, большая проблема заключалась в следующей строке:
TempSubject.RemoveAt(c4)
Это изменило коллекцию, все еще проходя по ней. Все будет двигаться вперед, что приведет к пропуску некоторых элементов.