Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Pytanie o petle for


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 mlekovita

    Zaawansowany

  • Użytkownik

Reputacja: 7
Nowy

  • Postów:149
  • Imię:Dawid
Offline

Napisano 27.05.2022 08:21

Siema, czy jest jakis logiczny sposob zeby zliczyc z tablicy unikalne id bo jak jest tablica w ktorej sa powtarzane liczby to zeby bralo tylko jedna liczbe (te same kolejne pomijalo) i szukalo kolejnej innej liczby?

 

1euVXMn.png


Użytkownik mlekovita edytował ten post 27.05.2022 08:24

  • +
  • -
  • 0

#2 Toldi

    Czempion

  • Power User

Reputacja: 259
Wszechwidzący

  • Postów:841
  • Imię:Mateusz
  • Lokalizacja:wies
Offline

Napisano 27.05.2022 15:43

Jeśli ma pomijać powtórzenia się liczb identycznych kolejno po sobie to możesz sprawdzić to. Nie testowałem

new const tablica[]={1, 26, 19, 4, 7, 7, 23, 5, 9};
	new unikalne_id;
	
	for(new i=0; i< sizeof tablica; i++)
	{
		if(i==0)
			unikalne_id++;
			
		if(tablica[i] == tablica[i-1])
			continue;
			
		unikalne_id++;
	}
	client_print(0, print_chat, "Jest %d unikalnych liczb", unikalne_id);

Chyba że chcesz żeby pomijało liczbę, która już wystąpiła a jej duplikat znajdzie się dopiero kilka komórek dalej no to ten kod już nie zadziała.


  • +
  • -
  • 0

#3 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 27.05.2022 17:53

Deduplikacja to nic prostszego niż wykorzystanie setu (tutaj akurat mapy, bo Tries to mapa):

#include <amxmodx>

print_arr(const arr[], arr_size){
	static buf[512];
	for(new i = 0; i < arr_size; i++){
		add(buf, charsmax(buf), fmt("%d, ", arr[i]))
	}
	log_amx(buf);
}

public plugin_init() {
	#define MAX_NUM 0x20
	new arr[MAX_NUM] = {2,4,1,2,1,1,1,1,1,5,6,7,2,2,1,3,2,5,8,6,4,8,3,2,6,3,2,1};
	new Trie:set = TrieCreate();
	new v;
	for(new i=0; i < sizeof(arr); i++){
		v = arr[i];
		TrieSetCell(set, fmt("%d", v), v);
	}

	new deduped[MAX_NUM];
	new TrieIter:iter = TrieIterCreate(set);
	new elements_num = TrieIterGetSize(iter);
	new idx=0;
	while(!TrieIterEnded(iter)){
		TrieIterGetCell(iter, v);
		deduped[idx++] = v;
		TrieIterNext(iter);
	}

	print_arr(deduped, elements_num);
	TrieIterDestroy(iter);
	TrieDestroy(set);
}

Screenshot 2022-05-27 185240.png

 

Mam nadzieje, że kod zrozumiały


Rivit (27.05.2022 18:26):
Polecam też nazywać tematy tak, żeby nazwa faktycznie odzwierciedlała czego dany temat dotyczy.

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych