-1

我有四个数组:

Data Example:= (Array 1 | Array 2 | Array 3 | Array 4)

R.E.M.|In Time: The Best Of R.E.M. 1988-2003|album:6G5BGhEiLvck3kvKpSYw2y|Rock
Nick Drake|Family Tree|album:2euLAROPTmXDIDuU3qVMkf|Folk
Sonic Youth|Dirty|album:0QPkL6ap8riBoQ5xN8YDR3|Noise Rock

我想对由其中一个数组过滤的所有数组进行排序,例如 array 1: Artist

我在 AutoIt 中编程,但答案可能是 VBA/VBS/ASP、Java 或 C#。

4

2 回答 2

1

解决该问题的面向对象的方法是定义一个 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 个数组上复制其交换操作。不过,这还有很多工作。

于 2009-08-13T02:52:02.237 回答
0

我想对所有数组进行排序……

  1. 将一维数组组合成一个二维数组
  2. 使用 对结果数组进行排序_ArraySort()
  3. 可选择转置数组
于 2018-05-15T14:32:06.423 回答