大家早上好。
我目前正在尝试找出一些我相信它足够简单但被证明是一项任务半才能真正解决的问题。
我正在开发一个项目,旨在通过将各种文件重新定位到其他地方来最大限度地减少驱动器的使用。我有一个int64
值数组(0..12),其中包含我可能想要移动的文件的文件大小。数组的排序方式是预测的最大文件大小到预测的最小文件大小。我还将这些文件的名称存储在不同的数组中(称为WoWData
, 也[0..12]
)。然后我得到了“安装尺寸”和“所需尺寸”。
我的任务是计算我需要移动哪些文件,以便通过遍历文件大小数组将“安装大小”降低到“所需大小”,并将值从安装大小中取出,直到我达到 <=所需的大小。
这是我一直在尝试使用的一些示例代码(Delphi/Firemonkey)。试图弄清楚如何完成这样的任务让我感到困惑,因此毫无疑问会有很多问题;
Global Vars;
_WoWDataFileSize : Array [0..12] of Int64;
// "TBWoWDir" is a TTrackBar (Firemonkey)
var
TotalSize, ReqSize, DiffSize, CurDiff : Int64;
i : Integer;
begin
// Set up initial values to work with
ReqSize := Round(TBWoWDir.Value); // Requested Size
TotalSize := Round(TBWoWDir.Max); // Actual installation size
CurDiff := 0; // Assume as "Current Difference in size"
// Calculate difference between install and requested size
DiffSize := TotalSize - ReqSize; // This calculates correctly
// The below is what i'm struggling with
repeat
for i := Low(_WoWDataFileSize) to High(_WoWDataFileSize) do
begin
CurDiff := ReqSize - _WoWDataFileSize[i];
end;
until CurDiff <= ReqSize;
end;
我确实尝试过只使用一个repeat .. until
没有循环的for
循环,但同样,我在试图弄清楚它时变得太困惑了。
让我举个例子。让我们假设它_WoWDataFileSize[0]
是 200,并且_WoWDataFileSize[1]
通过 to_WoWDataFileSize[12]
与它们的数组索引的值相同(例如_WoWDataFileSize[6]
= 6、_WoWDataFileSize[8]
= 8 等)。
如果我想计算 150 的值(这将是200 - 12 - 11 - 10 - 9 - 8
,或Array[0] - Array[12] - Array[11] - Array[10] - Array[9] - Array[8]
根据数组),并从数组中获取我需要移动以满足此要求的文件列表,我将WoWData
如何编写例程?
150 可以替换为任何数字,因为我正在努力实现由TBWoWDir.Value
.
我在想我可能需要做一个While
循环并使用i := i+1
设置。实际上,我可以通过并对其进行硬编码,以便一次取出数组中的一个值,并每次检查我是否 <= 所需的值——每个项目有 2-3 行(所以总共 24-36 行),但这既难以维护又不是最佳的。我有兴趣看看它是如何在循环中完成的。我通常不会遇到循环问题,但这对我来说几乎不是标准的。