[HackerRank]用樣本過濾陣列(Filter an Array with Patterns)

題目描述

輸入的每行都是一個國家名稱,請將著些國家名稱讀取到一個陣列中儲存,接著把名稱有包含「a」或「A」的元素過濾掉,輸出過濾之後的結果。

原題網址

https://www.hackerrank.com/challenges/bash-tutorials-filter-an-array-with-patterns

輸入格式

輸入的每行都是一個國家名稱,只會有大小寫英文字母和連字符號「-」。

輸出格式

將含有「a」或「A」的國家名稱過濾掉之後,輸出剩下來的國家名稱,用空白字元隔開。如果所有國家名稱都被過濾掉了,則輸出空行。

範例輸入

Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway

範例輸出

Niger

額外解釋

輸入的國家名稱中,只有「Niger」沒有包含「a」或「A」字元。

解題概念

Bash的陣列元素可以直接使用以下格式來指派:

陣列名稱[索引值]=元素

若之後要取得陣列的元素內容,可以這樣寫:

${陣列名稱[索引值]}

分別將輸入的各行作為元素存到陣列中,Bash可以這樣寫:

如果要印出陣列中所有的內容,可以使用「@」符號來取代索引值。格式如下:

echo ${陣列名稱[@]}

使用「@」符號的話,也可以搭配樣本(Pattern)來過濾掉不想要輸出的元素,格式如下:

echo ${陣列名稱[@]/樣本/}

符合樣本的元素將不會被輸出。因此如果不想輸出「Ni」開頭的元素,可以將echo命令寫成:

echo ${陣列名稱[@]/Ni*/}

如果不想輸出包含「a」字元的元素,可以將echo命令寫成:

echo ${陣列名稱[@]/*a*/}

樣本在預設情況下是會區分大小寫的。如果不想區分大小寫,可以改用中括號來撰寫規則,如下:

echo ${陣列名稱[@]/*[aA]*/}

參考答案

關於作者

Magic Len

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章