【问题标题】:BASH Binary Search in multiple arrays [duplicate]多个数组中的BASH二进制搜索[重复]
【发布时间】:2020-02-28 14:49:29
【问题描述】:

我有一个任务要做,我正在为此苦苦挣扎:

编写一个 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

有了这些信息,我现在可以看到每个数组何时“相关”(例如,在“姓名数组”中我们有 Ann,在“等级数组”中我们有她的分数“A”,等等开)

我的问题是如何“链接”这两个信息?例如,当有人输入 Bob 时,它会自动输出“Bobs 等级为 C”之类的东西?是否可以在 BASH 中“链接”两个数组值(例如在 namesarray[0] 中等效于 gradesarray[0],namesarray[1] 等效于gradearray[1] 等等)?还是我在这里做错了什么我错过了?

感谢您的帮助!

【问题讨论】:

  • Bobnames数组中的索引与他在grades数组中的成绩索引相同。
  • 顺便说一句,您正在做的是线性搜索,而不是二进制搜索。

标签: bash


【解决方案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}
}

【讨论】:

  • 嗨@Leonardo 有你已经完全回答你的问题的答案吗?如果他们有[上面的评论],或者如果没有,您可以编辑您的问题以澄清他们没有的原因并包括任何缺失的信息。如果有,请考虑将答案标记为“已接受”。
  • 谢谢!!!!现在一切对我来说都很有意义哈哈我在做线性搜索,我忘了用计数来找到学生,然后找到成绩。 (我使用了 While 循环而不是 For,但效果很好)。
  • 没问题!很高兴你知道了
猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 2019-05-02
  • 2016-10-10
  • 2012-01-04
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多