İnteger tipinde dönen bir bilgiyi , 0.. 300 arasında integer tipte tanımlanmış bir dizide varmı kontrolü yapmak istiyorum. Her dizideki elamanları döngüye sokup karşılaştırmanın dışında farklı bir yöntem var mı ? Mesela char tipindeki ( İn ) gibi..
char tipindekine örnek
if not (krk in ['I','Ğ','Ü','Ş','İ','Ö','Ç']) then gibi
[Çözüldü]Dönen değeri dizi içindekilerle karşılaştırma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
[Çözüldü]Dönen değeri dizi içindekilerle karşılaştırma
En son Lord_Ares tarafından 18 Eyl 2016 01:54 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Dönen değeri dizi içindekilerle karşılaştırma
Merhaba,
Delphi 2010 ve sonrası için aşağıdaki şekilde hazır fonksiyonlardan faydalanabilirsiniz. Eğer eski sürüm bir Delphi kullanıyor iseniz sizin de bahsettiğiniz gibi for döngüsü içinde kontrol ederek geriye değer çevirmelisiniz.
Her iki durumda da kendi fonksiyonunuzu yazmanız kullanım olarak daha avantajlı olacaktır.
Kullanımı ise aşağıdaki şekildedir.
Yukarıdaki kod 2 değerini bulup, 4 değerini bulamayacaktır. Eğer ileride string değerler içinde aynı kontrolü yapmanız gerekirse aşağıdaki gibi mevcut fonksiyon kullanımını genişletebilirsiniz.
NOT: Eğer Array önceden sıralanmış olursa InArray() fonksiyonları aşağıdaki şekle çevrilebilir. Ya da hiç kullanılmayıp direk Delphi fonksiyonları kullanılabilir.
Delphi 2010 ve sonrası için aşağıdaki şekilde hazır fonksiyonlardan faydalanabilirsiniz. Eğer eski sürüm bir Delphi kullanıyor iseniz sizin de bahsettiğiniz gibi for döngüsü içinde kontrol ederek geriye değer çevirmelisiniz.
Her iki durumda da kendi fonksiyonunuzu yazmanız kullanım olarak daha avantajlı olacaktır.
Kod: Tümünü seç
uses
Generics.Collections;
function InArray(const ItemToFind: Integer; const Arr: TArray<Integer>): Boolean;
var
InternalArray: TArray<Integer>;
Index: Integer;
begin
InternalArray := Arr;
// BinarySearch özelliği sort edilmiş Array ile kullanılmalıdır.
TArray.Sort<Integer>(InternalArray);
Exit(TArray.BinarySearch<Integer>(InternalArray, ItemToFind, Index));
end;
Kod: Tümünü seç
procedure TForm15.Button1Click(Sender: TObject);
var
MyArr: TArray<Integer>;
begin
SetLength(MyArr, 3);
MyArr[0] := 3;
MyArr[1] := 1;
MyArr[2] := 2;
if InArray(2, MyArr) then ShowMessage('2 dizi içinde');
if InArray(4, MyArr) then ShowMessage('4 dizi içinde');
end;
Kod: Tümünü seç
unit Unit15;
interface
uses
Winapi.Windows,
Winapi.Messages,
System.SysUtils,
System.Variants,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Generics.Collections,
Generics.Defaults;
type
TForm15 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function InArray(const ItemToFind: Integer; const Arr: TArray<Integer>): Boolean; overload;
function InArray(const ItemToFind: string; const Arr: TArray<string>): Boolean; overload;
public
{ Public declarations }
end;
var
Form15: TForm15;
implementation
{$R *.dfm}
function TForm15.InArray(const ItemToFind: Integer; const Arr: TArray<Integer>): Boolean;
var
InternalArray: TArray<Integer>;
Index: Integer;
begin
InternalArray := Arr;
TArray.Sort<Integer>(InternalArray);
Exit(TArray.BinarySearch<Integer>(InternalArray, ItemToFind, Index));
end;
function TForm15.InArray(const ItemToFind: string; const Arr: TArray<string>): Boolean;
var
InternalArray: TArray<string>;
Index: Integer;
begin
InternalArray := Arr;
TArray.Sort<string>(InternalArray);
Exit(TArray.BinarySearch<string>(InternalArray, ItemToFind, Index, TStringComparer.Ordinal));
end;
procedure TForm15.Button1Click(Sender: TObject);
var
MyArr: TArray<Integer>;
MyStrArr: TArray<string>;
begin
SetLength(MyArr, 3);
MyArr[0] := 3;
MyArr[1] := 1;
MyArr[2] := 2;
if InArray(2, MyArr) then ShowMessage('2 dizi içinde');
if InArray(4, MyArr) then ShowMessage('4 dizi içinde');
SetLength(MyStrArr, 3);
MyStrArr[0] := 'veli';
MyStrArr[1] := 'ali';
MyStrArr[2] := 'hasan';
if InArray('ali', MyStrArr) then ShowMessage('"ali" dizi içinde mevcut');
end;
end.
Kod: Tümünü seç
function TForm15.InArray(const ItemToFind: Integer; const Arr: TArray<Integer>): Boolean;
var
Index: Integer;
begin
Exit(TArray.BinarySearch<Integer>(Arr, ItemToFind, Index));
end;
function TForm15.InArray(const ItemToFind: string; const Arr: TArray<string>): Boolean;
var
Index: Integer;
begin
Exit(TArray.BinarySearch<string>(Arr, ItemToFind, Index, TStringComparer.Ordinal));
end;
Re: Dönen değeri dizi içindekilerle karşılaştırma
Ertank emeğine ellerine sağlık. Sayenizde yeni birşey daha öğrenmiş oldum. Delphi xe10 kullanıyorum. Sanırım Delphi 2010 ve üstü sürümlerdeki yeni fonksiyonları araştırıp yakından inceleme zamanı gelmiş. 
