解决该问题的面向对象的方法是定义一个 Album 类型,该类型包含与专辑有关的所有 4 条信息,并且具有单个专辑数组而不是 4 个数组。
然后,您可以根据需要定义专辑比较。这是 C# 中的一个示例(在 Java 中会非常相似):
class Program {
static void Main(string[] args) {
Album[] albums = { new Album { artist = "potatotes",
family = "soup",
title = "a",
year=1546 },
new Album { artist = "etc",
family="blabla",
title="blablabla",
year = 1999 }
};
Array.Sort(albums);
}
}
class Album : IComparable<Album> {
public int CompareTo(Album y) {
return family.CompareTo(y.family);
}
public string title { get; set; }
public string artist { get; set; }
public int year { get; set; }
public string family { get; set; }
}
在这里,我们根据专辑的族实现了 IComparable 接口。一般的想法是将所有相关信息分组到一个类中,然后您可以根据其字段之一定义该类的对象的比较。
正如有些人可能指出的那样,在 C# 中有更灵活的方法可以实现这一点,但我希望尽可能简单且与语言无关。
只要语言支持用户定义的结构,这应该可以复制,但我什至不确定 AutoIT 是否支持。在这种情况下,您必须保留 4 个数组,并实现一个自定义排序函数,该函数对其中一个数组进行排序并同时在其他 3 个数组上复制其交换操作。不过,这还有很多工作。