go程序比较两个数组并将匹配的元素存储在golang中的第三个数组中

时间:2020-01-14 09:57:36

标签: arrays linux go merge comparison

嗨,我是新手,我只是编写了一个程序来比较两个数组并将匹配的元素存储在第三个数组中,但未成功执行


package main

import (
    "fmt"
)

func main(){

    var firstarray =[10] int {1,9,12,16,13,11,14,18,8,12}
     var secondarray =[10] int {9,7,15,8,14,19,34,18,13,11}
    var finalarray [] int

     var i,j,mat int

     for i=0; i<=10; i++{

        for j=0; j<=10; j++{

            if firstarray[i] == secondarray[j]{
                finalarray[mat] == secondarray[j]
                mat++
            }
        }
     }

    fmt.Println("matching no is",finalarray)

}

3 个答案:

答案 0 :(得分:1)

代码中的主要错误是越界访问数组(可以通过遍历数组中的元素而不是使用索引来解决此问题),以及最终数组的构造(可以使用来构建)追加,而不是分配给索引)。

您还使用==进行分配,这是一个错误,因为它是比较运算符。单等号=是赋值运算符。

这是代码的清理后的工作版本。

package main

import (
    "fmt"
)

func main() {
    firstarray := []int{1, 9, 12, 16, 13, 11, 14, 18, 8, 12}
    secondarray := []int{9, 7, 15, 8, 14, 19, 34, 18, 13, 11}
    var finalarray []int

    for _, a1 := range firstarray {
        for _, a2 := range secondarray {
            if a1 == a2 {
                finalarray = append(finalarray, a2)
            }
        }
    }

    fmt.Println("matching no is", finalarray)

}

最好使用地图查找匹配的元素,因为这样代码可以是O(n)而不是O(n ^ 2)。

答案 1 :(得分:1)

实际上!要插入第三个数组,将生成Index out of range错误,因此,首先您必须指定索引长度,以便它可以将区域指向要存储值的数组。

还要将值赋给第三个变量,您还必须使用单个赋值运算符(=)而不是equal(==)运算符。

按照下面的示例。

package main

import (
    "fmt"
)

func main(){

    var firstarray =[10] int {1,9,12,16,13,11,14,18,8,12}
     var secondarray =[10] int {9,7,15,8,14,19,34,18,13,11}
    var finalarray [10]int

     var i,j,mat int

     for i=0; i<10; i++{

        for j=0; j<10; j++{

            if firstarray[i] == secondarray[j]{
                finalarray[mat] = secondarray[j]
                mat++
            }
        }
     }

    fmt.Println("matching no is",finalarray)

}

答案 2 :(得分:1)

package main

import (
    "fmt"
)

func main() {
    type void struct{}
    var member void
    firstarray := map[int]void{1: member, 9: member, 12: member, 16: member, 13: member, 11: member, 14: member, 18: member, 8: member}
    secondarray := map[int]void{9: member, 7: member, 15: member, 8: member, 14: member, 19: member, 34: member, 18: member, 13: member, 11: member}

    var finalarray []int
    for k := range firstarray {
        if _, ok := secondarray[k]; ok {
            finalarray = append(finalarray, k)
        }
    }

    fmt.Println("matching no is", finalarray)
}