我确实有一个有趣的问题正在尝试解决,但我还无法做到。
假设我有 2 个数组。
数组一:
1 -2 3 -2 2 -4
数组二:
-2 -3 4 5 2 -5
我希望能够实际比较Array one
和的第 i 个值Array two
:
- 如果两者都是负数那么我会输入
Array Three
0
- 如果他们都是积极的,我会添加一个
1
- 如果它们是相反的,我需要插入一个
2
输出:
2 0 1 2 1 0
我怎样才能做到这一点 ?
答案1
如果您熟悉 C、C++ 或 Java,那么您也会发现bash
s for
-loop 的这种变体也非常熟悉。 bash
进行算术评估,(( ... ))
因此我们在比较值时将使用它:
array1=( 1 -2 3 -2 2 -4 )
array2=( -2 -3 4 5 2 -5 )
array3=( )
for (( i=0; i < ${#array1[@]}; ++i )); do
if (( array1[i] < 0 && array2[i] < 0 )); then
array3[$i]=0
elif (( array1[i] > 0 && array2[i] > 0 )); then
array3[$i]=1
else
array3[$i]=2
fi
done
echo "${array3[@]}"
这也适用于ksh93
shell,从中bash
获得了许多功能。
答案2
直接的方法:
arr1=(1 -2 3 -2 2 -4)
arr2=(-2 -3 4 5 2 -5)
i=0
while [[ "$i" -lt "${#arr1[@]}" ]]; do
a=$(( ${arr1[$i]} * ${arr2[$i]} ))
if [[ "$a" -lt 0 ]]; then
echo 2
else
if [[ "${arr1[$i]}" -gt 0 ]]; then
echo 1
else
echo 0
fi
fi
: "$((i = i + 1))"
done | paste -sd ' ' -