按顺序比较两个数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按顺序比较两个数组相关的知识,希望对你有一定的参考价值。

我认为这很简单,但我似乎把事情搞混了,而且我没有在stackoverflow上找到任何与我的问题完全匹配的东西。

我正在尝试编写一个可以比较两个文件名数组的函数,以确保它们的值匹配。他们需要实际匹配他们的位置,所以顺序是至关重要的。换一种说法:

array1 = ["file1.html", "file2.html", "file3.html", "file4.html"]
array2 = ["file1.html", "file2.html", "file4.html", "file3.html"]

我希望这两个数组之间的比较返回为false,因为顺序不同(即使两个数组实际上包含相同的值)。我试过这样的事情:

matching = true
names1 = array1.map { |x| File.basename(x)}
names2 = array2.map { |x| File.basename(x)}
    names1.each_with_index { |file,index|
        if file != names2[index]
            matching = false
        end
    }
return matching

这有效,但我想知道是否有一种更简洁,更简单的方式来比较数组?谢谢!

答案

你不需要做任何类似的事情。默认数组相等运算符比较数组和顺序

array1 = %w[file1.html file2.html file3.html file4.html]
array2 = %w[file1.html file2.html file4.html file3.html]
array3 = %w[file1.html file2.html file3.html file4.html]

array1 == array2 # => false
array1 == array3 # => true

比较映射值的示例(如果数组中有完整路径)

array1.map{|a| File.basename(a)} == array2.map{|a| File.basename(a) }
# or, as @mudasobwa would suggest
[array1, array2].map{|a| a.map(&File.method(:basename)) }.reduce(:==)

使用最后一个,当且仅当a)你完全理解它并且b)你认为这是个好主意。

以上是关于按顺序比较两个数组的主要内容,如果未能解决你的问题,请参考以下文章

使用冒泡排序对Java中的名称数组按字母顺序排序

scrapy按顺序启动多个爬虫代码片段(python3)

JS sort() 按照某个属性对数组进行排序

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

比较两个字符串数组,我的控制台应用程序“停止响应”

sort()