2017-08-19 9 views
0

にランダムな配列項目を避けますか?は、私は次のコードを持っているbashの

+1

[BASHシェルで配列の要素をシャッフルする簡単な方法?](https://stackoverflow.com/questions/5533569/simple-method-to-shuffle-the-elements-of-an- array-in-bash-shell) – melpomene

+0

'printf'は不要です。 'uniqueLetters =(" $ {a_letters [@]} ")'は同じことを達成します。 – chepner

+0

関連:https://stackoverflow.com/q/3846123/4957508 –

答えて

0

あなたは、いくつかの簿記を行う必要があります。

2つの可能性:

  1. をa_letters配列
  2. から使用済みの文字を削除しますが、未使用にヒットするまで印刷された文字を追跡し、ランダムに実行します1。

私はオプション1のために行くだろう:

n=1 

a_letters=("a" "b" "c" "d" "e") 

while [ $n -le 3 ]; do 
    uniqueLetters=($(printf '%s\n' "${a_letters[@]}")) 
    rand=$[ ($RANDOM % ${#a_letters[@]})] 
    echo "${uniqueLetters[$rand]}" 
    a_letters=("${a_letters[@]/${uniqueLetters[$rand]}}") 
    n=$(($n+1)) 
done 

(未テスト)。

選択した文字を配列a_lettersから削除し、配列サイズをランダムに使用して、自動的に縮小された配列サイズを修正します。

+0

私は簿記について考えました:-)今後の使用のために配列の要素をそのまま残しておきたいのですが?さらに、結果は常に3文字にする必要があります。 1日に1回実行する必要があります。 – silverscales

+0

'a_letters'が変更されないように、ループごとに' a_letters'のコピー配列を設定することができます(実際には最も単純なオプションです)。 –

関連する問題