Delphide array işlemleri ?

Başlatan cozturk, 06 Haziran 2005, 12:49:42

cozturk

2 adet dizi var diyelim. bunları kısa yoldan birbirie nasıl eşitleyebiliriz?

yani döngü yapmadan:
for i:=0 to max do array1:=array2 ;

Başka bir sorunum ise şudur. şimdi bir byte array var. bu dizinin elemenları başka dizilere  ayrıştırılacak. mesela: tek indexli  olanlar bir dizi çift indexli olanlar 2. dizi gibi. fakat bütün bunları döngü gibi uzun bir işlem yapmadan kısa yoldan yapmam gerekiyor.  diziler arası işlemler için önereceğiniz başarılı bileşenler de olabilir.

birumher

Kısa yoldan eşitleme yapmak istiyorsan pointer kullanman gerekecek. Ornegin pchar kullanabilirsin oldukca hizlandiracaktir. Eger cok buyuk datalarla ugrasacaksan 1.000.000 adet falan gibi TmemoryStream de kullanabilirsin.  
Tek indexli olanları baska diziye cift indexli olanlari baska diziye atmak icin ise bildiğim kadarıyla döngüden başka çaren yok. Ama emin ol delphi de bu tip işler gerçekten çok hıizlı. Gönül rahatlığıyla döngülerini kullanabilirsin...
Birkan.Herguner

cozturk

memoryStream.writebuffer  çok ideal.  bir butona basıldığında kendi oluşturduğum bir byte array üzerinde denedim. herşey tamam. dizi 32k uzunluğunda filan idi. sorun yok. 1024k olsa da sorun olmaz buna inanıyorum. fakat sorun , benim programın kullandığı dll de olsa gerek. oraya ait byte array değişkeni sadece blockwrite'a izin veriyor. memorystream'e yazıldığında boş görünüyor. fena bir durum. bir de ilgili forumlara sorayım :(

birumher

Senin kullandığın dizinin pointer adresi olmasın? Bir de yazacağın zaman örneğin 32000 byte yazacaksın arrayinin ismi de aByteArray olsun. mstream.write(aByteArray[0],32000) okuyacağın zaman ise mstream.read(aByteArray[0],32000) diye kullan...
Birkan.Herguner

cozturk

:oops:
procedure oku;

var
pbuf: pByteArray;
ms: Tmemorystream;

begin
...
...
ms.WriteBuffer(pbuf^, size);
end;

:)  :D