Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Go中跨多个数组检入变量_Arrays_Go - Fatal编程技术网

Arrays 如何在Go中跨多个数组检入变量

Arrays 如何在Go中跨多个数组检入变量,arrays,go,Arrays,Go,我在Go语言中查找了几种查看数组的方法,但在多个数组中搜索的方法不多。我的程序的目的是获取一个输入并在多个数组中搜索,以查看该输入是否在其中一个数组中,如果该项在其中一个数组中,它将指定在哪个数组中找到该项。这是我目前的代码: package main import "fmt" func main() { arr := []string{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s

我在Go语言中查找了几种查看数组的方法,但在多个数组中搜索的方法不多。我的程序的目的是获取一个输入并在多个数组中搜索,以查看该输入是否在其中一个数组中,如果该项在其中一个数组中,它将指定在哪个数组中找到该项。这是我目前的代码:

package main

import "fmt"

func main() {
    arr := []string{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"}
    numbers := arr[26:36]
    letters := arr[0:26]
    fmt.Println(letters)
    vowels := []string{arr[0],arr[4],arr[8],arr[14],arr[20]}
    fmt.Println(arr)
    fmt.Println(numbers)
    fmt.Println(vowels)
    consonants := []string{arr[1],arr[2],arr[3],arr[5],arr[6],arr[7],arr[9],arr[10],arr[11],arr[12],arr[13],arr[15],arr[16],arr[17],arr[18],arr[19],arr[21],arr[22],arr[23],arr[24],arr[25]}
    fmt.Println(consonants)
    odds := []string{numbers[1],numbers[3],numbers[5],numbers[7],numbers[9]}
    fmt.Println(odds)
    evens := []string{numbers[0],numbers[2],numbers[4],numbers[6],numbers[8]}
    fmt.Println(evens)
}
如果我现在通过命令提示符运行该程序,这将是输出:

C:\Users\Owner\Desktop>go run Array.go
[a b c d e f g h i j k l m n o p q r s t u v w x y z]
[a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[a e i o u]
[b c d f g h j k l m n p q r s t v w x y z]
[1 3 5 7 9]
[0 2 4 6 8]
总之,我需要获取一个输入,并在上面的数组中搜索该术语可能存在的位置。这就是我想要的示例代码:

Enter term: a
The term "a" was found in array "vowels"
任何帮助都可以


注:我一直提到的术语仅指单数字母或0-9之间的数字。如果我的代码和/或输出看起来不整洁,我也很抱歉,因为我还没有时间清理它

使用键作为术语、值作为术语类型切片的映射:

m := map[string][]string{}
for _, v := range letters {
    m[v] = append(m[v], "letters")
}
for _, v := range vowels {
    m[v] = append(m[v], "vowels")
}
for _, v := range consonants {
    m[v] = append(m[v], "consonants")
}
for _, v := range numbers {
    m[v] = append(m[v], "numbers")
}
for _, v := range odds {
    m[v] = append(m[v], "odds")
}
for _, v := range evens {
    m[v] = append(m[v], "evens")
}

fmt.Println(m["a"]) // prints [letters vowels]
fmt.Println(m["1"]) // prints [numbers odds]

使用键作为术语,值作为术语类型切片的映射:

m := map[string][]string{}
for _, v := range letters {
    m[v] = append(m[v], "letters")
}
for _, v := range vowels {
    m[v] = append(m[v], "vowels")
}
for _, v := range consonants {
    m[v] = append(m[v], "consonants")
}
for _, v := range numbers {
    m[v] = append(m[v], "numbers")
}
for _, v := range odds {
    m[v] = append(m[v], "odds")
}
for _, v := range evens {
    m[v] = append(m[v], "evens")
}

fmt.Println(m["a"]) // prints [letters vowels]
fmt.Println(m["1"]) // prints [numbers odds]

使用下面的映射和函数搜索关键字类别,如“”:


使用以下映射和函数搜索关键字类别,如“”:


下面是一个使用数组进行ASCII字符类测试的示例

charclass.go

package main

import (
    "bufio"
    "fmt"
    "os"
)

const maxASCII = 0x7F

var letters = [maxASCII + 1]bool{
    'a': true, 'b': true, 'c': true, 'd': true, 'e': true, 'f': true, 'g': true,
    'h': true, 'i': true, 'j': true, 'k': true, 'l': true, 'm': true, 'n': true,
    'o': true, 'p': true, 'q': true, 'r': true, 's': true, 't': true, 'u': true,
    'v': true, 'w': true, 'x': true, 'y': true, 'z': true,
}

func isLetter(r rune) bool {
    return (r >= 0 && int(r) < len(letters)) && letters[r|0x20]
}

var vowels = [maxASCII + 1]bool{
    'a': true, 'e': true, 'i': true, 'o': true, 'u': true,
}

func isVowel(r rune) bool {
    return (r >= 0 && int(r) < len(vowels)) && vowels[r|0x20]
}

func isConsonant(r rune) bool {
    return isLetter(r) && !isVowel(r)
}

var numbers = [maxASCII + 1]bool{
    '0': true, '1': true, '2': true, '3': true, '4': true,
    '5': true, '6': true, '7': true, '8': true, '9': true,
}

func isNumber(r rune) bool {
    return (r >= 0 && int(r) < len(numbers)) && numbers[r]
}

func isOddNumber(r rune) bool {
    return isNumber(r) && (r-'0')&1 == 1
}

func isEvenNumber(r rune) bool {
    return isNumber(r) && (r-'0')&1 == 0
}

func main() {
    var classes = []struct {
        name string
        test func(rune) bool
    }{
        {"is a letter", isLetter},
        {"is a consonant", isConsonant},
        {"is a vowel", isVowel},
        {"is a number", isNumber},
        {"is an odd number", isOddNumber},
        {"is an even number", isEvenNumber},
    }

    enter := "Enter a line:"
    fmt.Println(enter)
    s := bufio.NewScanner(os.Stdin)
    for s.Scan() {
        line := s.Text()
        if len(line) == 0 {
            break
        }
        for _, r := range line {
            for _, class := range classes {
                if class.test(r) {
                    fmt.Printf("%q %s\n", r, class.name)
                }
            }
        }
        fmt.Println(enter)
    }
    if err := s.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
}

下面是一个使用数组进行ASCII字符类测试的示例

charclass.go

package main

import (
    "bufio"
    "fmt"
    "os"
)

const maxASCII = 0x7F

var letters = [maxASCII + 1]bool{
    'a': true, 'b': true, 'c': true, 'd': true, 'e': true, 'f': true, 'g': true,
    'h': true, 'i': true, 'j': true, 'k': true, 'l': true, 'm': true, 'n': true,
    'o': true, 'p': true, 'q': true, 'r': true, 's': true, 't': true, 'u': true,
    'v': true, 'w': true, 'x': true, 'y': true, 'z': true,
}

func isLetter(r rune) bool {
    return (r >= 0 && int(r) < len(letters)) && letters[r|0x20]
}

var vowels = [maxASCII + 1]bool{
    'a': true, 'e': true, 'i': true, 'o': true, 'u': true,
}

func isVowel(r rune) bool {
    return (r >= 0 && int(r) < len(vowels)) && vowels[r|0x20]
}

func isConsonant(r rune) bool {
    return isLetter(r) && !isVowel(r)
}

var numbers = [maxASCII + 1]bool{
    '0': true, '1': true, '2': true, '3': true, '4': true,
    '5': true, '6': true, '7': true, '8': true, '9': true,
}

func isNumber(r rune) bool {
    return (r >= 0 && int(r) < len(numbers)) && numbers[r]
}

func isOddNumber(r rune) bool {
    return isNumber(r) && (r-'0')&1 == 1
}

func isEvenNumber(r rune) bool {
    return isNumber(r) && (r-'0')&1 == 0
}

func main() {
    var classes = []struct {
        name string
        test func(rune) bool
    }{
        {"is a letter", isLetter},
        {"is a consonant", isConsonant},
        {"is a vowel", isVowel},
        {"is a number", isNumber},
        {"is an odd number", isOddNumber},
        {"is an even number", isEvenNumber},
    }

    enter := "Enter a line:"
    fmt.Println(enter)
    s := bufio.NewScanner(os.Stdin)
    for s.Scan() {
        line := s.Text()
        if len(line) == 0 {
            break
        }
        for _, r := range line {
            for _, class := range classes {
                if class.test(r) {
                    fmt.Printf("%q %s\n", r, class.name)
                }
            }
        }
        fmt.Println(enter)
    }
    if err := s.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
}

对进行一个
循环并搜索这些切片。有很多方法可以做到这一点,大多数方法都非常简单。你有什么特别想要的吗?一个示例输出可能会大有帮助。我正在尝试让用户在上面列出的多个数组中搜索一个术语,并让程序打印出在哪个数组中找到它。我会编辑我的帖子,让你明白我的意思@Heathraftery执行
for
循环并搜索这些切片。有很多方法可以做到这一点,大多数方法都非常简单。你有什么特别想要的吗?一个示例输出可能会大有帮助。我正在尝试让用户在上面列出的多个数组中搜索一个术语,并让程序打印出在哪个数组中找到它。我会编辑我的帖子,让你明白我的意思@谢谢你的意见!这个程序适用于我注册的一个类,其中一个要求是在Go语言中使用数组,所以我必须在代码中保留数组。我来试试地图,看看结果如何@这是一个奇怪的要求。首先,您使用的是切片而不是数组。现在有没有一种方法可以让用户指定一个变量进行搜索?@QFlat是的,请查看
fmt.Scanf
和朋友。家庭作业式的问题很难回答,因为我们不知道你到目前为止涵盖了什么。谢谢你的输入!这个程序适用于我注册的一个类,其中一个要求是在Go语言中使用数组,所以我必须在代码中保留数组。我来试试地图,看看结果如何@这是一个奇怪的要求。首先,您使用的是切片而不是数组。现在有没有一种方法可以让用户指定一个变量进行搜索?@QFlat是的,请查看
fmt.Scanf
和朋友。家庭作业式的问题很难回答,因为我们不知道你到目前为止涵盖了什么。