【问题标题】:How to sort 4 1D arrays?如何对 4 个一维数组进行排序?
【发布时间】:2009-08-13 02:00:11
【问题描述】:

我有四个数组:

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

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

我正在使用 AutoIt 进行编程,但答案可能是 VBA/VBS/ASP、Java 或 C#。

【问题讨论】:

    标签: arrays sorting autoit


    【解决方案1】:

    解决该问题的面向对象的方法是定义一个专辑类型,其中包含与专辑有关的所有 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 个数组上复制其交换操作。不过,还有很多工作要做。

    【讨论】:

    • +1. 但是 AutoIt 中没有“面向对象”之类的东西。
    • AutoIt 中可以进行收藏,但不够灵活:= [Code] $col = ObjCreate("Scripting.Dictionary") $col.Item("Artist") = "Sonic Youth " [/Code] 但是我看不到如何实现集合排序,尽管将四个数组更改为单个 n*4D 数组可能是更简单的路线。嗯... =|)arkSprout=
    • 我认为单个 4D 数组没有任何用处。如果该语言没有为自定义结构提供适当的支持,请坚持使用 4 个数组。像往常一样为 1 个数组实现排序例程。现在,在排序例程中,每次移动元素时,对其他 3 个数组执行相同操作,以便它们始终保持同步。当例程完成时,所有 4 个数组都根据其中之一进行排序。否则,看看你是否可以切换到更好的编程语言......
    【解决方案2】:

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

    1. Combine 1D arrays into a single 2D array
    2. 使用_ArraySort()对结果数组进行排序。
    3. 可选transpose array

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2018-06-02
      • 2017-04-18
      相关资源
      最近更新 更多