我有一个数组
a[1..5] : array of integer;
接下来我做了一些检查并将一些值设置为1。
DoesSomeDataCheck()
begin
...
if True
a[Count] = 1;
.....
end
现在可以说将数组值设为:
a[1] = 1;
a[2] = 1;
a[3] = 0;
a[4] = 0;
a[5] = 1;
现在我需要在= 1的所有整数中随机获得其中一个。 不知道从哪里开始这个.. 但在这种情况下应该返回1,2,5。 希望这很清楚,如果不让我知道并且生病,试着更好地解释它
答案 0 :(得分:2)
创建一个数组来保存索引:
var
Indices: array [1..5] of Integer;
一个变量,用于保存原始数组中值为1的索引数:
var
IndicesCount: Integer;
初始化:
IndicesCount := 0;
for i := 1 to 5 do
if a[i] = 1 then
begin
Inc(IndicesCount);
Indices[IndicesCount] := i;
end;
然后你可以随机抽样
Assert(IndicesCount>0);
Sample := Indices[1 + Random(IndicesCount)];
旁白:
a
看起来很像它的元素应该是Boolean
类型。 a
的代码可以直接在我的答案中构建Indices
数组。如果您出于任何其他目的不需要a
,那将更简单。 答案 1 :(得分:0)
采用动态数组整数来维护值为1的索引。
Var
indexArray : Array of Integer;
..........
更改你的DoesSomeDataCheck(),如下所示,
procedure DoesSomeDataCheck()
begin
...
if True
begin
a[Count] := 1;
setLength(indexArray, Length(indexArray)+1);
indexArray[Length(indexArray)-1] := Count;
end;
.....
end
现在,您可以随时使用indexArray。无需再次检查。 我希望这对你有用。