# Question19 - 一覧に対する絞り込み・変換・並び替え 本資料の練習問題は、複数のプログラミング言語(Java / C# / PHP / Python)で共通して利用できるよう記述されています。静的型付け・動的型付けの違いや文字列の連結ルールなど、言語固有の文法仕様に基づき、問題文の表現をご使用の言語の仕様に適宜読み替えて進めてください。 ## この問題のねらい - 一覧(配列・リストなど)から、条件に合う要素だけを絞り込めること - 絞り込んだ要素それぞれに、変換(加工)を適用できること - 一覧の要素を、ある基準(値の大小など)で並び替えられること - 「繰り返し処理を自分で書いて1件ずつ判定する」のではなく、「絞り込む」「変換する」「並び替える」という操作そのものを一続きの処理として組み立てられること(言語によっては、絞り込み・変換・並び替えのための専用の仕組みが用意されている場合があるので、使える場合はそれを使ってよい) ## 各言語での実現方法について(参考) この問題は、絞り込み・変換・並び替えを自分で繰り返し処理を書いて実装するのではなく、各言語に用意されている専用の仕組みを使って実装することを想定しています。使用する言語に応じて、次のような仕組みの利用を検討してください。 - **Java**: Stream API(`stream()` / `filter()` / `map()` / `sorted()` / `collect()` など) - **C#**: LINQ(`Where` / `Select` / `OrderBy` / `OrderByDescending` など) - **PHP**: 標準の配列関数(`array_filter()` / `array_map()` / `usort()` など)。Laravelのコレクション(`collect()` とその `filter()` / `map()` / `sortByDesc()` など)が利用できる環境であれば、それを使ってもよい - **Python**: リスト内包表記(`[... for ... in ... if ...]`)や、組み込みの `sorted()` 関数(`key` 引数・`reverse` 引数)、`filter()` / `map()` 関数 上記の仕組みが用意されていない、または使用が難しい場合は、通常の繰り返し処理で同等の結果が得られる方法で代用して構いません。 以下の設問はそれぞれ独立したプログラムとして実装してください。 --- ## 設問1 次の文字列の一覧を用意してください。 - `Apple`, `Banana`, `Grape`, `Orange`, `Apricot` この一覧から、**文字数がちょうど5文字**の要素だけを抜き出し、抜き出した要素をすべて出力してください。 ### 期待される結果 - 抜き出される要素:`Apple`、`Grape`(この2件) - 出力順は元の一覧の並び順のままでよい --- ## 設問2 次の整数の一覧を用意してください。 - `5, 12, 8, 20, 3, 15, 1, 11` この一覧から、**10より小さい値**だけを抜き出し、抜き出した値をそれぞれ**2倍**したうえで、すべて出力してください。 ### 期待される結果 - 元の並び順のまま、次の4件が出力されること: ``` 10 16 6 2 ``` --- ## 設問3 「商品」を表すデータを用意してください。商品は「名前」と「値段」を持ちます。次の5件のインスタンスを用意してください。 | 名前 | 値段 | |---|---| | ぶどう | 500 | | りんご | 200 | | みかん | 150 | | メロン | 800 | | いちご | 600 | この一覧から、**値段が500以上**の商品だけを抜き出し、**値段が高い順に並び替えて**、次の形式で1件ずつ出力してください。 - 出力形式:`果物:xx 値段:yy`(xxは商品名、yyは値段) ### 期待される結果 次の3件が、この順序で出力されること: ``` 果物:メロン 値段:800 果物:いちご 値段:600 果物:ぶどう 値段:500 ```