Arrays 如何在Go中跨多个数组检入变量
我在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
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
和朋友。家庭作业式的问题很难回答,因为我们不知道你到目前为止涵盖了什么。