2009-08-13 82 views
0

我有四组包含所有相关数据,如何...排序4个一维数组?

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#

任何机构都可以帮助 - 它会让我的头部受伤。

= |)arkSprout =

回答

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个数据库上复制其交换操作。尽管如此,还有很多工作要做。

+0

+ 1.但在AutoIt中没有“面向对象”的东西。 – 2009-08-13 03:03:27

+0

集合中的AutoIt是可能的,但它们不是很灵活:= [代码] $山口=啊的ObjCreate( “的Scripting.Dictionary”) $ col.Item( “艺术家”)= “音速青年” [/代码] 但我看不出如何实现一个集合排序,虽然将四个数组更改为一个n * 4D数组可能是更简单的路线。 Hummmm ... = |)arkSprout = – DarkSprout 2009-08-13 13:53:29

+0

我不认为单个4D阵列有任何用处。如果语言没有提供对定制结构的适当支持,请坚持使用4个数组。像通常那样为1个数组实施排序例程。现在,在排序例程中,每次移动元素时,在其他3个数组上执行相同操作,以使它们始终保持同步。当例程完成时,所有4个数组按照其中之一排序。 否则,看看你是否可以切换到更好的编程语言...... – Asik 2009-08-13 15:24:02