BASH二进制搜索多个数组

时间:2019-11-02 18:12:34

标签: bash

我有一个任务要做,我正在努力:

  

写一个BASH脚本,将文件中的学生姓名和成绩读入数组。提示用户输入学生姓名。使用二进制搜索方法,在数组中找到名称并显示等级。如果该学生不存在,请打印一条消息,说明这一点。

这是文件中的数据:

Ann:A
Bob:C
Cindy:B
Dean:F
Emily:A
Frank:C
Ginger:D
Hal:B
Ivy:A
Justin:F
Karen:D

因此,我首先要做的是在Linux操作系统中的主目录中使用上述结构在“ students”中创建一个文件。 然后在我的BASH脚本中创建以下脚本:

#!/bin/bash

#Store from a file called "students" the first field before " : " into array
names=( $( cut -d: -f1 students ) )

#Store from a file called "students" the second field after " : " into array
grades=( $( cut -d: -f2 students ) )

echo "Enter the Student Name:"
read inputname

for i in "${names[@]}"; do
    echo $i;
done

for j in "${grades[@]}"; do
    echo $j;;
done

有了这些信息,我现在可以看到每个数组何时“关联”(例如,在“ names数组”中,我们有Ann,在“ grades数组”中,她的得分是“ A”,依此类推)上)

我的问题是如何“链接”这两个信息?例如,当有人输入鲍勃时,它将自动输出“鲍勃等级为C”或类似的东西?是否有可能在BASH中“链接”两个数组值(例如,与gradesarray [0]等效的namesarray [0],与gradesarray [1]等效的namesarray [1]等)?还是我在这里做错了我想念的东西?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如下所示:您将一个学生输入“学生”数组,可以说它是第一个名字,因此您在数组索引0处。现在,您立即输入该学生的成绩进入另一个数组,在索引0。您已经从一个数组到另一个数组有了“链接”。因此,在搜索学生时,您需要做的是计算索引并将该数字传递到通过“成绩”数组的函数中,并在for循环中使用该参数。

伪代码

count = 0;
for(...){ ..
//student not found yet, keep going
count ++;
//student found! cool now find the grade.
gradeFind(count);
}

gradeFind(int count){
     for(i=0; i<grades_size; i++){
         if (i == count) { return the grade}
}