2015-02-17 2 views
0

У меня есть код видаОтдельные элементы в различных массивах

for each item x in array 
    if x in areaA 
     put x in aArray 
    if x in areaB 
     put x in bArray 
    if x in areaC 
     put x in cArray 

    if x in area1 
     put x in 1Array 
    if x in area2 
     put x in 2Array 
    if x in area3 
     put x in 3Array 
    ... 
    if x in area20 
     put x in 20Array 

где х может быть в А и 3, например. Проверки видны, если элемент находится в пределах их соответствующей области.

Этот код имеет 23 очень похожих проверки и 23 строки добавления элемента в соответствующий массив, поэтому мне кажется, что должен быть очевидный способ его очистки.

Как мне реорганизовать это, чтобы уменьшить количество проверок?

+0

Какой именно язык программирования? –

+0

Что такое 'a'? Вы ищете пересечение 'array' с каждым из' a', 'b', ...? – Ryan

+0

@joris_van_winden Я пытался сделать его обобщенным, но, к сожалению, настоящий язык является специфичным для игры. Это [SQF] (https://community.bistudio.com/wiki/SQF_syntax) – Adrian

ответ

0

Я решил эту проблему, поставив области, чтобы проверить в массивы, а затем циклически каждого массива:

for each item in array 
    for each area in areaABC 
     if item in area 
      put item in arrayABC[ foreach index] 
      break 
    for each area in area123 
     if item in area 
      put item in array123[ foreach index] 
      break 

Поскольку конкретный язык, с которым я работал, имеет структуру if-then-exitWith (похожую на использование перерыва) и дополнительно позволяет вам получить доступ к индексу цикла foreach, этот метод представляется наиболее кратким.

0

Вы можете создать функцию, которая имеет параметры x, a и array в качестве параметров, проверяет, есть ли x в a и помещает ее в массив, если это не так.

Кроме того, вы могли бы перебираем массивы в цикле без внешнего контура