Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/124.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
多数组中的BASH二进制搜索_Bash - Fatal编程技术网

多数组中的BASH二进制搜索

多数组中的BASH二进制搜索,bash,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脚本,将学生姓名和成绩从文件读入数组。提示用户输入学生姓名。使用二进制搜索方法,在数组中查找名称并显示等级。如果该学生不存在,请打印一条消息说明

以下是文件中的数据:

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
有了这些信息,我现在可以看到每个数组何时“相关”(例如,在“名称数组”中,我们有安,在“等级数组”中,我们有她的分数“A”,等等)

我的问题是如何“链接”这两个信息?例如,当某人输入Bob时,它将自动输出“Bobs等级为C”或类似的内容?是否可以在BASH中“链接”两个数组值(如namesarray[0]中等效于gradesarray[0],namesarray[1]中等效于gradesarray[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}
}
count=0;
对于(…){。。
//学生还没找到,继续
计数++;
//学生找到了!酷!现在找到成绩。
成绩发现(计数);
}
等级查找(整数计数){

对于(i=0;i
name
数组中的
Bob
索引与
grades
数组中他的成绩索引相同。顺便说一句,你所做的是线性搜索,而不是二进制搜索。嗨@Leonardo,你的答案已经完全回答了你的问题吗?如果他们有[上面的评论]如果不是,你可以编辑你的问题来解释为什么他们没有,包括任何丢失的信息。如果他们有,把答案标记为“被接受”。谢谢!!!现在一切都对我来说是有意义的。哈哈,我正在做线性搜索,我忘了用计数找到学生,然后找到分数。(我用了While循环代替For,但效果很好)。没问题!很高兴你找到了答案