Работа с массивами в циклах

Статус
В этой теме нельзя размещать новые ответы.

fsn

Сообщения
10
Реакции
0
здравствуйте. пытаюсь разобраться как на pawn сделать проверку в массиве на схожесть строк через цикл.

что у меня есть (кусок массива):

C#:
enum _:SoundsData
{
    DRAW[128],
    HIT_1[128],
    HIT_2[128],
    HIT_WALL[128],
    SLASH[128],
    STAB[128]
}

new const SOUNDS[][SoundsData] =
{
    {   
        "sound_folder/hand_draw.wav",
        "sound_folder/hand_draw.wav",
        "sound_folder/hand_hit.wav",
        "sound_folder/hand_hit.wav",
        "sound_folder/hand_slash.wav",
        "sound_folder/hand_hit.wav"
    },
    
    {   
        "sound_folder/hand_draw.wav",
        "sound_folder/blade_hit.wav",
        "sound_folder/blade_hit.wav",
        "sound_folder/blade_hitwall.wav",
        "sound_folder/blade_slash.wav",
        "sound_folder/blade_stab.wav"
    }
}
пытаюсь понять как мне перебрать каждую строку через цикл "for", чтобы, например если строка "sound_folder/hand_draw.wav" уже есть в "SOUNDS[0][DRAW]", то ее пропустить во всех других строках

как я пытался решить это:

C#:
for(new i = 0; i < sizeof(SOUNDS); i++)
{
    for(new m = i + 1; m < sizeof(SOUNDS); m++)
        if (equal(SOUNDS[i][DRAW], SOUNDS[m][DRAW]))
            ++i

    precache_sound(SOUNDS[i][DRAW])
}
но, к сожалению лучше способ не нашел
 
Сообщения
264
Реакции
132
Помог
13 раз(а)
Как вариант: одновременно с прекешем добавляй в Trie обработанные пути и в следующей итерации проверяй наличие в Trie.
 
Сообщения
2
Реакции
0
Решил спросить у ChatGPT 4, вот что ответил (может поможет):

Ваш вопрос требует выполнения двух основных задач:

1. Перебора всех элементов отдельно в каждым строке в вашей двумерной структуре данных
2. Проверки на наличие или отсутствие дубликатов, и пропуск их в случае их наличия.

Однако, обратите внимание на то что язык Pawn позволяет обращаться к элементам enum как к индексам массива, поэтому у вас можно перебрать как двумерный массив.

Вот пример кода, который выполняет это:

C#:
new i, j;

for(i = 0; i < sizeof(SOUNDS); i++)
{
    for(j = 0; j < sizeof(SoundsData); j++)
    {
        // Пропустить если звуковой файл уже присутствует в данном массиве звуков
        new skip = false;
        for(new k = 0; k < j; k++)
        {
            if(!strcmp(SOUNDS[i][j], SOUNDS[i][k], true))
            {
                skip = true;
                break;
            }
        }

        if(skip) continue;

        // Если файл звука еще не обрабатывался, выполнить необходимую обработку здесь
        printf("%s", SOUNDS[i][j]);
    }
}
Этот пример кода пропускает обработку звуковых файлов, если они уже были обрабатованы в текущем массиве, но он не будет пропускать звуковые файлы, которые встречаются в разных массивах. Если вы хотите учитывать все массивы при поиске дубликатов, вам потребуется слегка другой подход, который включает использование динамической структуры данных для отслеживания всех обработанных звуковых файлов.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
fsn, в чем заключается задача?
 

fsn

Сообщения
10
Реакции
0
fl0wer, в избежании повторного прекэша звуковых файлов
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
fsn, они и так не запрекешатся, если уже есть.
 

fsn

Сообщения
10
Реакции
0
Nordic Warrior, т.е., если я запрекэшу 10 раз один и тот же файл, то это никак не повлияет на 512 лимит?
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу