【发布时间】:2020-09-23 09:42:24
【问题描述】:
我正在使用 bash 来即时处理软件响应,我正在寻找一种方法来找到 数组中最大元素的索引。
输入到 bash 脚本的数据是这样的:
25 9
72 0
3 3
0 4
0 7
所以我创建了两个数组。有
arr1 = [ 25 72 3 0 0 ]
arr2 = [ 9 0 3 4 7 ]
我需要在 arr1 中找到最大数的索引,以便将它也用于 arr2。 但我想看看是否有一种快速 - 最佳的方法来做到这一点。
对我拥有的数据使用字典结构 [key][value] 会更好吗?这会让这个过程更容易吗?
我还找到了[1](来自用户 jhnc),但我不认为这是我想要的。
我的蛮力方法如下:
function MAX {
arr1=( 25 72 3 0 0 )
arr2=( 9 0 3 4 7 )
local indx=0
local max=${arr1[0]}
local flag
for ((i=1; i<${#arr1[@]};i++)); do
#To avoid invalid arithmetic operators when items are floats/doubles
flag=$( python <<< "print(${arr1$[${i}]} > ${max})")
if [ $flag == "True" ]; then
indx=${i}
max=${arr1[${i}]}
fi
done
echo "MAX:INDEX = ${max}:${indx}"
echo "${arr1[${indx}]}"
echo "${arr2[${indx}]}"
}
这种方法显然可行,但是,它是最优的吗?有没有更快的方法来执行任务?
arr1 = [ 99.97 0.01 0.01 0.01 0 ]
arr2 = [ 0 6 4 3 2 ]
在这个例子中,如果一个数组包含浮点数,那么我会得到一个
语法错误:算术运算符无效(错误标记为“.97)”
所以,我正在使用
flag=$( python <<< "print(${arr1$[${i}]} > ${max})")
为了解决这个问题。
【问题讨论】:
-
我会用 Python 编写整个脚本。数据结构和浮点数并不是 Bash 的强项。
-
@JohnKugelman True... 我使用 bash 是因为它给了我一些灵活性 w.r.t. python ( + os 包) 来处理正在运行的软件,直到我不得不处理这个问题......
-
这能回答你的问题吗? Bash Script Binary Search
-
@ceving 在我的情况下,不幸的是,我必须处理浮点数,这使得这个解决方案没有那么有用。 @chepner 的
awk下面的建议就像一个魅力!
标签: bash