在Delphi中,是否有可能在另一个数组中包含一个数组?

时间:2015-02-05 18:00:22

标签: arrays delphi

是否可以将数组存储在另一个数组中,以便可以保存更多数据。

例如,一个数组包含5个字符串变量:Charlie,Tom,Harry,Jane和Josh。这些中的每一个都包含一个存储五个朋友名字的数组。

Delphi中有可能吗?

使用此:我正在创建一个程序,优先投票给五个候选人,每个候选人都需要有自己的数组,数组中的第一个变量显示他们有多少首选项等等。 我已经解释过,我需要将这些数据输入到包含候选者名字的数组中。

2 个答案:

答案 0 :(得分:1)

是否可以使用Delphi将一个数组存储在另一个数组中?是的。实现这一点的最简单方法是:

//Standard one dimensional array of Strings
AMyArray: Array[0..5] of String;

//Array containing multiple Standard one dimensional arrays
//Or in other word two dimensional array
MYArrayColection: Array[0..4] of AMyArray;

注意为了实现你想要的一维数组必须包含6个元素。第一个元素存储您的人名。接下来五个存储他/她朋友的名字

但这是一个糟糕的设计。为什么呢?
如果我们看看你的例子查理,汤姆和哈里都可以把简当作油炸。这意味着你将存储她的名字多次,这样做会消耗更多的记忆 现在有少量的人员和少量的朋友,这不会造成问题,但当你有大量的朋友(你可能会想要以后),这可能会成为一个真正的问题,因为你可能会浪费大量因此而存在的记忆量。

首先不是将人员信息存储在字符串中存储在记录中。此记录应具有用于存储人员姓名的名称字段和用于存储朋友连接的整数数组。为什么整数数组?
下一步你应该做的是创建一个TPerson记录数组,以存储人工记录。 一旦你有了这个,你首先用所有可用的pepole填充你的pepole阵列,但此时你仍然没有填写他们朋友的信息。
填好你的人造阵列后,你就开始为每个人输入被解雇的信息。但是,您只需存储此朋友存储在pepole数组中的索引,而不是存储朋友姓名。

所以代码看起来像这样:

//Record used to store information about individual person
TPerson = record
  //Persons name field
  Name: String;
  //Array storing index references to persons friends
  Friends: Array[0..4] of Integer;
end;

//Array storing multiple person records
Pepole: Array[0..4] of TPerson;

这就是你如何获得存储在pepole数组中的第一个人的名字:

PersonsName := Pepole[0].Name;

这就是你如何获得第一个存储在pepole数组中的第二个朋友的名字

SecondFriendsName := Pepole[Pepole[0].Friends[1]].Name;

这个电话可能有点难以理解 外侧方括号内的代码返回我们要搜索的好友记录的索引号。

答案 1 :(得分:0)

除了@SilverWarrior提供的答案,还有另一种选择。 虽然我建议使用array of record的第二种方法。

有多种方法可以声明多维数组 例1:

type
  TMyArray = array of string; //or array[0..N] of string if it's fixed size
  TMyArrList = array of TMyArray;//or array[0..N] of TMyArray

示例2:

var
  MyArray: array of array of string;//Dynamic array will require SetLength for both main and subarrays
  MyOtherArray: array[0..5] of array[0..5] of string;

示例3 :(仅限固定长度,如果数组类型相同)

var
  MyArray[0..5, 0..5] of string;

示例3是我在需要多维数组时通常所做的事情。

您的示例的另一种可能性是使用TDictionary中可以找到的Generics.Collections
它看起来像这样:

type
  MyFriends = Array[0..4] of String;
//In class or function/procedure
var
  MyDict: TDictionary<String, MyFriends>;

希望这会对你有所帮助。