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

Is it possible, in Delphi , to have an array inside another array?

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

例如,一个数组包含 5 个字符串变量,分别是:Charlie、Tom、Harry、Jane 和 Josh。如果他们中的每一个都包含一个数组来存储他们五个朋友的名字。

这在 Delphi 中可行吗?

这个的用途:我正在创建一个程序,为五名候选人投票,每个候选人都需要有自己的数组,数组中的第一个变量显示他们有多少第一偏好等等. 如前所述,我需要将此数据输入到包含候选人姓名的数组中。

是否可以使用 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 个元素。第一个元素存储您的人名。接下来五个存储 his/hers 朋友的名字

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

首先,不是将人员信息存储在字符串中,而是存储在记录中。该记录应具有用于存储人名的名称字段和用于存储朋友关系的整数数组。为什么是整数数组?
因为接下来您应该做的是创建一个 TPerson 记录数组以存储人的记录。 一旦你有了这个,你首先用所有可用的人填充你的人数组,但此时你仍然没有填写关于他们朋友的信息。
填充人阵列后,您可以开始为每个人输入发射信息。但不是存储朋友的名字,而是简单地存储这个朋友存储在 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;

这个调用可能有点难理解。
外方括号内的代码returns是我们要查找的好友记录的索引号。

除了@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>;

希望这对您有所帮助。