如何使用Ruby合并和排序多个列表?

csw*_*grl 5 ruby

我有2个列表,其中包含日期和数据.每个列表按照序列号所指示的顺序排列.现在我需要将两个列表合并在一起,并按正确顺序保存所有内容.

例如:

清单A
20101001 A数据1 seq1
20101001 A数据2 seq2
20101005 A数据3 seq3

清单B
20101001 B数据1 seq1
20101003 B数据2 seq2

等等...

我需要新列表看起来像这样:

20101001个数据1 SEQ1
20101001一种数据2 SEQ2
20101001 B数据1个SEQ3
20101003个B数据2个SEQ4
20101005的数据3 SEQ5

2个东西,我认为是合并列表一起之前,将它们插入到一个分贝或者我可以将它们插入到当前序列数据库中并重新将他们拉回到它们合并在一起申请的序列号,但是,似乎是一个额外的步骤和缺憾.

关于最佳方式的任何想法?

Dav*_*ims 5

假设您的列表位于Ruby Arrays中,并且列表中的对象定义了属性(例如obj.sequence_number),则对列表进行合并和排序的一种方法是:

首先将列表合并为联合:

@merged_list = @list_a | @list_b
Run Code Online (Sandbox Code Playgroud)

然后使用适当的排序规则对merged_list进行排序:

@merged_list.sort! {|a, b| a.date <=> b.date # or whatever your sorting rule is... }
Run Code Online (Sandbox Code Playgroud)

编辑:

合并后的数组排序后,您可以重新定义sequence_number:

@merged_list.each_with_index {|obj, index| obj.sequence_number = "seq#{index+1}"}
Run Code Online (Sandbox Code Playgroud)

编辑:

如果列表中的对象本身只是简单的数组,则同样适用:

@merged_list.sort! {|a, b| a[0] <=> b[0] # or whatever your sorting rule is... }
@merged_list.each_with_index {|obj, index| obj[2] = "seq#{index+1}"}
Run Code Online (Sandbox Code Playgroud)