興味深い問題があり、解決しようとしていますが、まだ解決していません。
2つの配列があるとしましょう。
配列1:
1 -2 3 -2 2 -4
配列2:
-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 -loopfor
バリアントも非常によく知られています。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
シェルでも機能します。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 ' ' -