4

さまざまな width:height 値を配列の末尾にプッシュする bash スクリプトがあります。一部の値が重複しています。私がする必要があるのは、配列をループし、配列内の一意の値ごとに出現回数を数えてから、重複が最も多い値を取得することです。

dimensions=( )
dimensions[${#dimensions[*]}]="450:180"
dimensions[${#dimensions[*]}]="360:240"
dimensions[${#dimensions[*]}]="360:240"
dimensions[${#dimensions[*]}]="640:480"
dimensions[${#dimensions[*]}]="360:240"
dimensions[${#dimensions[*]}]="640:480"

上記の配列では、3 つの重複があるため、値「360:240」を取得する必要があります。一意の値を数えて、配列からの重複が最も多い値を含む変数になるにはどうすればよいですか?

mostDuplicates="360:240"
4

1 に答える 1

4

Bash バージョン 4 には連想配列があります。

#! /bin/bash
dimensions=(
    450:180
    360:240
    360:240
    640:480
    360:240
    640:480)

declare -A count
max=0

for d in ${dimensions[@]} ; do
    if (( ++count[$d] > max )) ; then
        max=${count[$d]}
        winner=$d
    fi
done
echo Winner: $winner, $max times
于 2013-01-08T17:50:28.743 に答える