我该怎么写这个?:
If number is different from Array[1] to Array[x-1] the begin......
其中number是一个整数,array是一个从1到x的整数数组
答案 0 :(得分:10)
如果在数组number
中找不到MyArray
,我相信你想做点什么。然后你就可以这样做:
NoMatch := true;
for i := Low(MyArray) to High(MyArray) do
if MyArray[i] = number then
begin
NoMatch := false;
break;
end;
if NoMatch then
DoYourThing;
您可以创建一个函数来检查数组中是否找到了数字。然后,每次需要执行此类检查时,您都可以使用此功能。每次,代码都会更具可读性。例如,您可以这样做:
function IsNumberInArray(const ANumber: integer;
const AArray: array of integer): boolean;
var
i: integer;
begin
for i := Low(AArray) to High(AArray) do
if ANumber = AArray[i] then
Exit(true);
result := false;
end;
...
if not IsNumberInArray(number, MyArray) then
DoYourThing;
如果您使用旧版本的Delphi,则必须将Exit(true)
替换为begin result := true; break; end
。在较新版本的Delphi中,我想你也可以玩泛型等东西。
答案 1 :(得分:1)
您也可以编写泛型版本,但是不能将泛型与独立过程一起使用,它们需要绑定到类或记录上。类似于以下内容
unit Generics.ArrayUtils;
interface
uses
System.Generics.Defaults;
type
TArrayUtils<T> = class
public
class function Contains(const x : T; const anArray : array of T) : boolean;
end;
implementation
{ TArrayUtils<T> }
class function TArrayUtils<T>.Contains(const x: T; const anArray: array of T): boolean;
var
y : T;
lComparer: IEqualityComparer<T>;
begin
lComparer := TEqualityComparer<T>.Default;
for y in anArray do
begin
if lComparer.Equals(x, y) then
Exit(True);
end;
Exit(False);
end;
end.
用法是
procedure TForm6.Button1Click(Sender: TObject);
begin
if TArrayUtils<integer>.Contains(3, [1,2,3]) then
ShowMessage('Yes')
else
ShowMessage('No');
end;
应该使用诸如TArray<integer>
或array of integer
之类的参数以及常量数组(如图所示)-并且您可以向该类添加许多其他方法,例如IndexOf
或{{ 1}} ...