删除数组2D delphi中的相同元素字符串

时间:2014-04-20 18:13:46

标签: arrays string delphi

这篇文章与我最近的帖子类似。但在这个问题中,我想补充更多问题,更复杂。

我有如下的数组:

R : array [0..200,0..200] of string;

R[0,1]='33332323171787877777444434454445545455434333376777888788444433337887'
R[0,2]='331881818818188181881818112223333333333333377788118111'
R[1,1]='143322217777777777777777777617188118181185554555454554455545455544548'
R[1,2]='333321321111281111881821132132111121181118888787777777777777761555555554'
R[1,3]='3333888818811118111111112111113211321321323233323333333343334344444454'
R etc..

我想删除相同的元素。所以结果如下:

Result[0,1]='32323171787874345454545434376787843787'
Result[0,2]='318181818181818181812378181'
Result[1,1]='1432176171818181854545454545454548'
Result[1,2]='32132128181821321321218187876154'
Result[1,3]='38181812132132132132323234343454'

结果保存在名为Result的新数组中,如上所述。
你们能帮助我吗? 上一篇文章我提到了一维数组。谢谢,如果你们可以向我解释。
非常感谢。我非常感谢你的所有答案,因为我是德尔福的新手。在我家附近,我不能问任何人。

1 个答案:

答案 0 :(得分:1)

您之前提出的问题的答案定义了此功能:

function RemoveAdjacentDuplicates(const X: string): string;

只需将其应用于数组中的每个元素。

var
  R, Result: array [0..200,0..200] of string;
  i, j: Integer;
....
for i := low(R) to high(R) do
  for j := low(R[i]) to high(R[i]) do
    Result[i,j] := RemoveAdjacentDuplicates(R[i,j]);

Delphi使用名称Result来表示函数的返回值。如果您的变量不是函数的返回值,那么将它命名为Result会很困惑。如果是这种情况,我建议您选择其他名称。


您需要学习的关键是编程就是创建有用的,简单的构建块,然后使用这些简单的构建块来创建更复杂的东西。

您需要进入编程开发的地方就是能够看到您提出的问题完全独立于RemoveAdjacentDuplicates的实现。这与这个问题无关。考虑当前问题的方法是认识到您将相同的转换映射到数组的每个元素。实际上转变并不重要。所以你可能会编写一个这样的函数:

function Map(const input: array of string; 
    fn: TFunc<string, string>): TArray<string>;

其任务是将fn中提供的转换应用于input的每个元素,并返回包含该转换输出的新数组。该功能通常如下实现:

function Map(const input: array of string; 
    fn: TFunc<string, string>): TArray<string>;
var
  i: Integer;
begin
  SetLength(Result, Length(input));
  for i := low(Result) to high(Result) do
    Result[i] := fn(input[i]);
end;

然后你可以表达你的转变:

output := Map(input, RemoveAdjacentDuplicates);

现在,这对你不起作用,因为你有一个静态尺寸的2D数组。发生这种情况是一种非常尴尬的类型。然而,在答案的第二部分,我试图提出更具指导性的观点,希望你能原谅我跳过这个细节。