İki diziyi karşılaştırma ve benzerleri bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

İki diziyi karşılaştırma ve benzerleri bulma

Mesaj gönderen celalatak »

Merhaba

iki tane dizim var örnek olarak

Dizi1 : 1,3.4.6,9,11
Dizi2 : 3,9,15,16 gibi

kodla aynı olan sayıları bulmak istiyorum
yukardaki örnek diziye göre

Dizi3 : 3,9 olmalı

Sorunuma gelince dizi1 ve dizi2'nin eleman sayıları 80.000 'kadar çıkabilir.
Kullanıcıyı bu işlem yapılırken bekletmek istemiyorum.

Çözüm için aklıma bir yöntem geldi ancak kodu yazmadan sizlerinde fikrini almak istedim.
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Karşılaştırma işlemini Thread içinde yap, böylece bekletmezsin. Threadle ilgili bilgileri hem bu forumdan, hem de netten bulabilirsin. Kullanıcıyı bekletmemek için başka bir çözüm yolu da yok. Sadece Application.ProcessMessages var, ama onun da performansı Thread kadar yüksek olmaz. Ayrıca bu komutun kullanım amacı da zaten bu gibi işler değil.

Kolay gelsin
Bahadır Alkaç
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

80,000 veri için dizi kullanmak mantıklı olmaz ve ciddi bir risktir.Hatta anladığım kadarıyla bir de dinamiz dizi kullanıyorsun.Daha da büyük risk :?:
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

Mesaj gönderen celalatak »

Aslında dizi kullanmıyorum sorunumu daha rahat açıklamak için o şekilde ifade ettim. Veriler TStringList'e aktarılıyor.

Modül fast text search yapıyor. Verdiğim sayılar veri tabanındaki kaydın Id si.
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

Mesaj gönderen celalatak »

Benzer sorunla karşılaşanlara örnek kod. 1-2 saniyede 500.000 girişin benzer olanlarını çıkartıyor.

Kod: Tümünü seç

var
  Form1: TForm1;
  s,s1:TstringList;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
s:=TstringList.Create;
s1:=TstringList.Create;
for i :=1  to 500000 do
  s.Add(inttostr(i));


for i :=200 to 2000 do
  s.Add(inttostr(i));
s.Sort;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
j:integer;
begin

for  j:=0  to s.Count-2 do
  begin
  if s[j]=s[j+1] then
    s1.Add(s[j]);
  end;


memo1.Text:=s1.Text;
end;
Cevapla