/**
* ドメイン非依存URL出力フィルタ
* javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい
*
* データベースには絶対URL(https://minner.asia)を保持し、
* 表示時に現在のドメイン(home_url())に動的変換する
*/
function javadrill_make_urls_dynamic($content) {
if (empty($content)) {
return $content;
}
// データベース内の絶対URLを現在のhome_url()に置換
$old_url = 'https://minner.asia';
$new_url = untrailingslashit(home_url());
// http版も対応(念のため)
$content = str_replace($old_url, $new_url, $content);
$content = str_replace('http://minner.asia', $new_url, $content);
return $content;
}
// 投稿本文、ウィジェット、タームの説明、抜粋に適用
add_filter('the_content', 'javadrill_make_urls_dynamic', 20);
add_filter('widget_text', 'javadrill_make_urls_dynamic', 20);
add_filter('term_description', 'javadrill_make_urls_dynamic', 20);
add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20);
ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€ã“れã¾ã§å¦ã‚“ã Mapæ“作をç·å‹•å“¡ã—ã¦ã€å®Ÿè·µçš„ãªå‡¦ç†ã‚’構築ã—ã¾ã™ã€‚ ã“ã®Finalã‚¹ãƒ†ãƒƒãƒ—ã‚’è‡ªåŠ›ã§æ›¸ã切れãŸãªã‚‰ã€Mapã®åŸºæœ¬æ“作ã¯ä¸€é€šã‚Šãƒžã‚¹ã‚¿ãƒ¼ã—ãŸã¨è¨€ã£ã¦è‰¯ã„。 102 ステップアップå•題 「Map修羅é“〠Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€ŒMap修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼ ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™ ã‚ãªãŸã¯ã€å•†å“æƒ…å ±ã¨æ³¨æ–‡æƒ…å ±ã‚’ã‚‚ã¨ã«ã€æ¬¡ã®ã‚ˆã†ãªå‡¦ç†ã‚’è¡Œã† å•†å“æ³¨æ–‡ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ を作æˆã—ã¾ã™ã€‚ 以下ã®2ã¤ã®MapãŒã™ã§ã«å˜åœ¨ã—ã¦ã„ã¾ã™ï¼š 以下ã®ãƒ‡ãƒ¼ã‚¿ã‚’使ã£ã¦ã€å„商å“ã®åˆè¨ˆé‡‘é¡ã‚’計算ã—ã€æœ€çµ‚çš„ãªç·å£²ä¸Šé‡‘é¡ã‚’出力ã—ã¦ãã ã•ã„。 →解ç”例 Mapã§ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã™ã‚‹ã¨ãã€ã€Œå€¤ã‚’消ã™ã€ã¨ã€Œå€¤ã‚’æ›´æ–°ã™ã‚‹ã€ã¯åˆ¥ã®æ“作ã§ã™ã€‚ Mapã®æ“作ã«ã¯ã€Œå‰Šé™¤ã€ã¨ã€Œæ›´æ–°ã€ãŒã‚りã€ãれãžã‚Œæ˜Žç¢ºã«å½¹å‰²ãŒé•ã„ã¾ã™ã€‚ 102 ステップアップå•題 「Map修羅é“〠Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€ŒMap修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼ ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™ ã‚ãªãŸã¯ã€ä¼šå“¡ç•ªå·ã¨åå‰ã‚’管ç†ã™ã‚‹ MapUtil.java
import java.util.*;
public class MapUtil {
public static void runOrderSimulator() {
// 商å“ã”ã¨ã®å˜ä¾¡ã‚’ä¿æŒã™ã‚‹Map
Map<String, Integer> priceMap = new HashMap<>();
priceMap.put("Apple", 120);
priceMap.put("Banana", 80);
priceMap.put("Orange", 100);
// æ³¨æ–‡æ•°ã‚’ä¿æŒã™ã‚‹Map
Map<String, Integer> orderMap = new HashMap<>();
orderMap.put("Apple", 3);
orderMap.put("Banana", 5);
orderMap.put("Grape", 2); // 登録ã•れã¦ã„ãªã„商å“
int total = 0; // ç·å£²ä¸Šé‡‘é¡
// 注文Mapをループ
for (String product : orderMap.keySet()) {
int quantity = orderMap.get(product);
// 商å“ãŒç™»éŒ²ã•れã¦ã„ã‚‹ã‹ãƒã‚§ãƒƒã‚¯
if (priceMap.containsKey(product)) {
int price = priceMap.get(product);
int subtotal = price * quantity;
// 明細を出力
System.out.println(product + " → å˜ä¾¡: " + price + "円, 個数: " + quantity + ", å°è¨ˆ: " + subtotal + "円");
// ç·è¨ˆã«åŠ ç®—
total += subtotal;
} else {
// 商å“ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼è¡¨ç¤º
System.out.println("エラー: å•†å“ '" + product + "' ã¯æœªç™»éŒ²ã§ã™ã€‚");
}
}
// ç·å£²ä¸Šã‚’出力
System.out.println("ç·å£²ä¸Š: " + total + "円");
}
}
解説:Mapを使ã£ã¦æ³¨æ–‡å‡¦ç†ã‚’実装ã™ã‚‹
ãƒã‚¤ãƒ³ãƒˆã¨ãªã‚‹å‡¦ç†
orderMap をループã—ã¦ã€å„商å“åã«å¯¾ã—㦠priceMap ã§å˜ä¾¡ã‚’å‚ç…§ã—ã¾ã™ã€‚containsKey() を使ã£ã¦ã€å˜åœ¨ã—ãªã„商å“ã‚’ãƒã‚§ãƒƒã‚¯
未登録商å“(例:”Grape”)ã¯ã€ã‚¨ãƒ©ãƒ¼ã¨ã—ã¦å‡ºåŠ›ã—ã€é›†è¨ˆå¯¾è±¡ã«å«ã‚ã¾ã›ã‚“。
最後ã«ç·å£²ä¸Šã‚’åˆè¨ˆãƒ»å‡ºåŠ›ã—ã¾ã™ã€‚å®Ÿè¡Œçµæžœã®ä¾‹
Apple → å˜ä¾¡: 120円, 個数: 3, å°è¨ˆ: 360円
Banana → å˜ä¾¡: 80円, 個数: 5, å°è¨ˆ: 400円
エラー: å•†å“ 'Grape' ã¯æœªç™»éŒ²ã§ã™ã€‚
ç·å£²ä¸Š: 760円
ã¾ã¨ã‚
containsKey() ã«ã‚ˆã‚‹å˜åœ¨ãƒã‚§ãƒƒã‚¯ã®é‡è¦æ€§
ã“れã§Mapã«ãƒ“ビるã“ã¨ã¯ã€ã‚‚ã†ãªã„。。
// tesh:
// è…‘ã«è½ã¡ã‚‹ã¾ã§ãŒå‹‰å¼·ã€‚è½ã¨ã—ã¦ã„ã‘ã€ã“ã“ã§ã€‚🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã€Œå•†å“æ³¨æ–‡ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’完æˆã•ã›ã‚ˆã€
Map<String, Integer> priceMap:商å“å → å˜ä¾¡ï¼ˆå††ï¼‰Map<String, Integer> orderMap:商å“å → 注文数(個)
登録済ã¿å•†å“データ(priceMap)
"Apple" → 120
"Banana" → 80
"Orange" → 100æ³¨æ–‡æƒ…å ±ï¼ˆorderMap)
"Apple" → 3
"Banana" → 5
"Grape" → 2 ↠ã“ã®å•†å“ã¯ç™»éŒ²ã•れã¦ã„ãªã„ï¼
è¦ä»¶
"Grape"ï¼‰ãŒæ³¨æ–‡ã•れãŸå ´åˆã¯ 「エラーã¨ã—ã¦è¡¨ç¤ºã€ã—ã€è¨ˆç®—対象ã«å«ã‚ãªã„ã“ã¨foræ–‡ã€Mapã€containsKey()を使用ã™ã‚‹ã“ã¨ï¼ˆStream API ã¯ä½¿ã‚ãªã„)
テストコード(Main.java)
public class Main {
public static void main(String[] args) {
MapUtil.runOrderSimulator();
}
}
ヒント
orderMap をループã—ã€å•†å“åã§ priceMap.containsKey() を確èªã™ã‚‹System.out.println("エラー: ...") ã§è¡¨ç¤º
MapUtil.java
import java.util.*;
public class MapUtil {
public static void testRemoveAndReplace() {
// 会員番å·ã¨åå‰ã‚’管ç†ã™ã‚‹Mapを作æˆ
Map<Integer, String> memberMap = new HashMap<>();
// データを登録
memberMap.put(1, "Yamada");
memberMap.put(2, "Tanaka");
memberMap.put(3, "Suzuki");
// 登録後ã®å‡ºåŠ›
System.out.println("=== åˆæœŸçŠ¶æ…‹ ===");
printMap(memberMap);
// 会員番å·2ã‚’remove
memberMap.remove(2);
// 削除後ã®å‡ºåŠ›
System.out.println("=== remove後 ===");
printMap(memberMap);
// 会員番å·3ã®åå‰ã‚’Katoã«replace
memberMap.replace(3, "Kato");
// 更新後ã®å‡ºåŠ›
System.out.println("=== replace後 ===");
printMap(memberMap);
}
// Mapã®å†…容を出力ã™ã‚‹ãƒ˜ãƒ«ãƒ‘ーメソッド
private static void printMap(Map<Integer, String> map) {
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
}
}
解説:remove() 㨠replace() ã¯ã¾ã£ãŸãé•ã†
ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ãã®é•ã„を明確ã«ä½“験ã—ã¾ã™ã€‚
remove(2) を実行ã™ã‚‹ã¨ã€ã€Œã‚ー2ã€ã¨ãã®å€¤ãŒMapã‹ã‚‰å®Œå…¨ã«æ¶ˆãˆã¾ã™ã€‚replace(3, "Kato") を実行ã™ã‚‹ã¨ã€ã€Œã‚ー3ã€ã®å€¤ãŒ “Suzuki” ã‹ã‚‰ “Kato” ã«ä¸Šæ›¸ãã•れã¾ã™ã€‚å‡ºåŠ›çµæžœï¼ˆä¾‹ï¼‰
=== åˆæœŸçŠ¶æ…‹ ===
1 → Yamada
2 → Tanaka
3 → Suzuki
=== remove後 ===
1 → Yamada
3 → Suzuki
=== replace後 ===
1 → Yamada
3 → Kato
使ã„分ã‘ã®ãƒã‚¤ãƒ³ãƒˆ
ã¾ã¨ã‚
データã®ãƒ©ã‚¤ãƒ•サイクルをæ„è˜ã—ã¦ä½¿ã„分ã‘ã¾ã—ょã†ã€‚
// tesh:
// æ£è§£ã ã‘ã˜ã‚ƒã€ç†è§£ã«ã¯ãªã‚‰ã‚“。ã“ã£ã¡ãŒæœ¬ç•ªã€‚🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã€Œå‰Šé™¤ã¨æ›´æ–°ã¯ãœã‚“ãœã‚“é•ã†ã€
Map<Integer, String> を扱ã£ã¦ã„ã¾ã™ã€‚
æ¬¡ã®æ“ä½œã‚’é †ã«è¡Œã£ã¦ã€ãã®éƒ½åº¦Mapã®çŠ¶æ…‹ã‚’å‡ºåŠ›ã—ã¦ãã ã•ã„:
remove() ã§å‰Šé™¤"Kato" ã« replace() ã§æ›´æ–°Map<Integer, String> を使用ã™ã‚‹ã“ã¨remove(key) 㨠replace(key, value) ã®æŒ™å‹•ã®é•ã„を明確ã«ã™ã‚‹ã“ã¨Map ã®ä¸èº«ã‚’出力ã—ã¦ç¢ºèªã™ã‚‹ã“ã¨for 文を用ã„ã¦æ˜Žç¤ºçš„ã«è¡¨ç¤ºã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.testRemoveAndReplace();
}
}
remove() ã¯ã‚ーã¨ãã®å€¤ã®ãƒšã‚¢ã‚’削除ã™ã‚‹replace() ã¯ã‚ーã®å€¤ã‚’別ã®å€¤ã§ä¸Šæ›¸ãã™ã‚‹ï¼ˆã‚ーãŒå˜åœ¨ã—ãªã‘れã°ä½•ã‚‚ã—ãªã„)remove() ã¯æˆ»ã‚Šå€¤ã‚り(削除ã•れãŸå€¤ï¼‰â†’è§£ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
import java.util.*;
public class MapUtil {
public static void testNullBehavior() {
// 会員IDã¨æ°åを管ç†ã™ã‚‹Mapを作æˆï¼ˆHashMapã¯nullã‚ー・null値を許容)
Map<Integer, String> memberMap = new HashMap<>();
// 通常ã®ãƒ‡ãƒ¼ã‚¿ã‚’登録
memberMap.put(1001, "Yamada");
// nullã‚’ã‚ーã¨ã—ã¦ç™»éŒ²ï¼ˆæœ‰åŠ¹ï¼‰
memberMap.put(null, "Tanaka");
// nullを値ã¨ã—ã¦ç™»éŒ²ï¼ˆæœ‰åŠ¹ï¼‰
memberMap.put(1002, null);
// Mapã®å†…容を出力
for (Map.Entry<Integer, String> entry : memberMap.entrySet()) {
Integer id = entry.getKey();
String name = entry.getValue();
System.out.println(id + " → " + name);
}
// nullã‚ーã§å–å¾—ã§ãã‚‹ã‹ç¢ºèª
System.out.println("nullã‚ーã®å€¤: " + memberMap.get(null));
// 値ãŒnullã®ã¨ãã®å–得確èª
System.out.println("ID 1002 ã®å€¤: " + memberMap.get(1002));
}
}Javaã®HashMapã¯ã€ä»–ã®Mapå®Ÿè£…ã¨æ¯”ã¹ã¦æŸ”軟ã§ã€nullã‚’ã‚ーや値ã«è¨±å®¹ã—ã¾ã™ã€‚
map.put(null, "Tanaka");HashMap 㯠nullã‚ーを1ã¤ã 㑠登録ã§ãã¾ã™put(null, ...) ã™ã‚‹ã¨ã€ä¸Šæ›¸ãã•れã¾ã™TreeMap ãªã©ã§ã¯ nullã‚ー㯠NullPointerException ã®åŽŸå› ã«ãªã‚‹ã®ã§æ³¨æ„map.put(1002, null);null 㯠値ã¨ã—ã¦ä½•個ã§ã‚‚登録å¯èƒ½null 値ã¨ã€Œæœªç™»éŒ²ã€ã‚’区別ã™ã‚‹ã«ã¯ containsKey() ã§ã®å˜åœ¨ç¢ºèªãŒå¿…è¦map.containsKey(1002); // true(nullãŒç™»éŒ²ã•れã¦ã„る)
map.get(1002); // null(値ãŒnull)
map.containsKey(9999); // false(未登録)1001 → Yamada
null → Tanaka
1002 → null
nullã‚ーã®å€¤: Tanaka
ID 1002 ã®å€¤: nullHashMapã¯nullã‚ーを1ã¤ã€null値を複数許å¯ã™ã‚‹containsKey() ã§åˆ¤åˆ¥ã™ã‚‹Mapã®æŸ”軟ã•ã¨è½ã¨ã—ç©´ã®ä¸¡æ–¹ã‚’体験ã™ã‚‹é‡è¦ãªã‚¹ãƒ†ãƒƒãƒ—ã§ã™ã€‚
102 ステップアップå•題 「Map修羅é“ã€
Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€ŒMap修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼

// tesh:
// 「æ„味ã¯ã‚ã‹ã‚‰ã‚“ã‘ã©é€šã£ãŸã€ã¯ä¸€ç•ªã‚ケン。確èªã—ã¨ã‘。ã‚ãªãŸã¯ã€ä¼šå“¡IDã¨æ°åã‚’ Map<Integer, String> ã§ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚
次ã®ãƒ‡ãƒ¼ã‚¿ã‚’Mapã«ç™»éŒ²ã—ã€ã™ã¹ã¦ã‚’出力ã—ã¦ãã ã•ã„:
ãã®å¾Œã€ä»¥ä¸‹ã‚’確èªã—ã¦ãã ã•ã„:
null ã‚’ã‚ーã¨ã—ã¦ä½¿ã£ãŸå ´åˆã€ç™»éŒ²ãƒ»å–å¾—ã¯ã§ãã‚‹ã‹ï¼Ÿnull を値ã¨ã—ã¦ä½¿ã£ãŸå ´åˆã€å‡ºåŠ›æ™‚ã«ã©ã†è¡¨ç¤ºã•れるã‹ï¼ŸHashMap を使ã†ã“ã¨ï¼ˆTreeMap 㯠null ã‚ーを許ã•ãªã„)null ã‚ー・値ã®ç™»éŒ²ãŒã§ãã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨for æ–‡ã§Mapを出力ã—ã€çµæžœã‚’明示的ã«è¦³å¯Ÿã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.testNullBehavior();
}
}HashMap 㯠null ã‚ーを1ã¤ã ã‘許å¯ã™ã‚‹null 値ã¯ã„ãã¤ã§ã‚‚OK(ãŸã ã—æ‰±ã„ã«ã¯æ³¨æ„)null ãŒè¦‹ãˆã¦ã‚‚ã€ã‚¨ãƒ©ãƒ¼ã«ã¯ãªã‚‰ãªã„→解ç”例
]]>import java.util.*;
public class MapUtil {
public static void printStoreInventory() {
// 店舗別ã®å•†å“在庫を記録ã™ã‚‹Map(ãƒã‚¹ãƒˆã•れãŸMapæ§‹é€ ï¼‰
// 外å´ã®Map: 店舗å → 内å´ã®Map
// 内å´ã®Map: 商å“å → 在庫数
Map<String, Map<String, Integer>> storeInventory = new HashMap<>();
// --- データ登録(Tokyo店) ---
addStock(storeInventory, "Tokyo", "Apple", 10);
addStock(storeInventory, "Tokyo", "Banana", 5);
// --- データ登録(Osaka店) ---
addStock(storeInventory, "Osaka", "Apple", 7);
addStock(storeInventory, "Osaka", "Orange", 3);
// --- 出力 ---
for (String store : storeInventory.keySet()) {
System.out.println(store + ":");
Map<String, Integer> products = storeInventory.get(store);
for (String product : products.keySet()) {
int stock = products.get(product);
System.out.println(" " + product + " → " + stock);
}
}
}
// ヘルパーメソッド:商å“åœ¨åº«ã‚’è¿½åŠ ã™ã‚‹
private static void addStock(Map<String, Map<String, Integer>> inventory,
String store, String product, int stock) {
// 店舗ãŒå˜åœ¨ã—ãªã‘ã‚Œã°æ–°ã—ãMapを作æˆ
if (!inventory.containsKey(store)) {
inventory.put(store, new HashMap<>());
}
// 店舗ã«å¯¾å¿œã™ã‚‹å•†å“Mapã‚’å–å¾—ã—ã€å•†å“ã¨åœ¨åº«ã‚’登録
inventory.get(store).put(product, stock);
}
}
ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€ã€ŒMapã®ä¸ã«MapãŒå…¥ã‚‹ã€ã¨ã„ã†ã‚„ã‚„è¤‡é›‘ãªæ§‹é€ を扱ã„ã¾ã™ã€‚
ç¾å®Ÿã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã§ã¯éžå¸¸ã«ã‚ˆã使ã‚れる形ã§ã™ã€‚
Map<String, Map<String, Integer>> storeInventory;
if (!inventory.containsKey(store)) {
inventory.put(store, new HashMap<>());
}
inventory.get(store).put(product, stock);
for (String store : storeInventory.keySet()) {
System.out.println(store + ":");
for (String product : storeInventory.get(store).keySet()) {
System.out.println(" " + product + " → " + 在庫数);
}
}
Tokyo:
Apple → 10
Banana → 5
Osaka:
Apple → 7
Orange → 3
ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã‚’ç†è§£ã™ã‚Œã°ã€è¤‡é›‘ãªéšŽå±¤æ§‹é€ ã®ãƒ‡ãƒ¼ã‚¿ã‚’Javaã§è‡ªåœ¨ã«æ‰±ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
102 ステップアップå•題 「Map修羅é“ã€
Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€ŒMap修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼
// tesh:
// 何ã‹ãƒ¢ãƒ¤ã£ã¨ã—ã¦ã‚‹ï¼Ÿ ãªã‚‰ç”ãˆã¯ã“ã“ã«ã‚る。
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚ãªãŸã¯ã€è¤‡æ•°ã®åº—舗ã«ãŠã‘る商å“ã®åœ¨åº«æƒ…å ±ã‚’ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚
æ§‹é€ ã¨ã—ã¦ã¯ã€æ¬¡ã®ã‚ˆã†ã« Mapã®ä¸ã«Map ãŒã‚ã‚‹å½¢ã§ã™ï¼š
次ã®ãƒ‡ãƒ¼ã‚¿ã‚’Mapã«ç™»éŒ²ã—ã€ã™ã¹ã¦ã®æƒ…å ±ã‚’å‡ºåŠ›ã—ã¦ãã ã•ã„:
出力形å¼ï¼ˆé †ä¸åŒï¼‰ï¼š
Tokyo:
Apple → 10
Banana → 5
Osaka:
Apple → 7
Orange → 3
Map<String, Map<String, Integer>> を使ã†ã“ã¨for æ–‡ã§2é‡ãƒ«ãƒ¼ãƒ—ã—ã¦ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’出力ã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.printStoreInventory();
}
}
containsKey() ã§åº—舗(外å´ã®Map)をãƒã‚§ãƒƒã‚¯new HashMap<>() を使ã£ã¦åˆæœŸåŒ–→解ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
import java.util.*;
public class MapUtil {
public static void findProductIdByName() {
// 商å“IDã¨å•†å“åã®å¯¾å¿œã‚’記録ã™ã‚‹Mapを作æˆ
Map<Integer, String> productMap = new HashMap<>();
productMap.put(101, "Apple");
productMap.put(102, "Banana");
productMap.put(103, "Orange");
// 検索対象ã®å•†å“å
String targetName = "Banana";
// フラグã¨çµæžœå¤‰æ•°ã‚’用æ„
boolean found = false;
int foundId = -1;
// Mapをループã—ã¦ã€valueã‹ã‚‰keyを探ã™
for (Map.Entry<Integer, String> entry : productMap.entrySet()) {
Integer id = entry.getKey();
String name = entry.getValue();
// 値(商å“å)ãŒä¸€è‡´ã—ãŸã‚‰
if (name.equals(targetName)) {
found = true;
foundId = id;
break; // 見ã¤ã‹ã£ãŸã‚‰ãƒ«ãƒ¼ãƒ—終了
}
}
// çµæžœã®å‡ºåŠ›
System.out.println("商å“å: " + targetName);
if (found) {
System.out.println("商å“ID: " + foundId);
} else {
System.out.println("見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ");
}
}
}
Mapã®åŸºæœ¬ã¯ã€Œã‚ー → 値ã€ã§ã™ã€‚
ã¤ã¾ã‚Šã€ã€ŒIDã‹ã‚‰åå‰ã‚’引ãã€ã®ã¯å¾—æ„ã§ã™ãŒã€ã€Œåå‰ã‹ã‚‰IDを探ã™ã€ã®ã¯å¾—æ„ã§ã¯ã‚りã¾ã›ã‚“。
Mapã¯ã‚ーã«å¯¾ã—ã¦ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ãƒ«ã‚„ãƒ„ãƒªãƒ¼æ§‹é€ ã‚’æ§‹ç¯‰ã—ã¦ã„ã¾ã™ãŒã€
値ã«é–¢ã—ã¦ã¯ä½•ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚‚æŒãŸãªã„ã‹ã‚‰ã§ã™ã€‚
ãã®ãŸã‚ã€å€¤ã‹ã‚‰ã‚ーを探ã™ã«ã¯ã€å…¨ä»¶ãƒ«ãƒ¼ãƒ—ã—ã¦1ä»¶ãšã¤æ¯”較ã™ã‚‹ã—ã‹ã‚りã¾ã›ã‚“。
for (Map.Entry<Integer, String> entry : map.entrySet()) {
if (entry.getValue().equals(target)) {
// 一致ã—ãŸã‚‰entry.getKey()ãŒç›®çš„ã®ID
}
}
equals() ã§æ–‡å—åˆ—ã®æ¯”較break ã™ã‚‹ã¨åŠ¹çŽ‡ãŒè‰¯ã„map.containsValue("Banana"); // true/false ã—ã‹è¿”ã•ãªã„
商å“å: Banana
商å“ID: 102
ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã§Mapã®ã€Œç‰‡æ–¹å‘性ã€ã‚’知ã£ã¦ãŠãã“ã¨ã¯ã€è¨è¨ˆãƒŸã‚¹ã‚’防ãã†ãˆã§ã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚
102 ステップアップå•題 「Map修羅é“ã€
Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€ŒMap修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼
// tesh:
// ã“ã®ã¸ã‚“曖昧ãªã¾ã¾ã ã¨ã€ç—›ã„ç›®ã¿ã‚‹ãžã€‚
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚ãªãŸã¯ã€å•†å“IDã¨å•†å“åã®å¯¾å¿œã‚’ Map<Integer, String> ã§ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚
Mapã«æ¬¡ã®ãƒ‡ãƒ¼ã‚¿ã‚’登録ã—ã€ãã®å¾Œã€ã€Œã‚る商å“åã€ãŒMap内ã«å˜åœ¨ã™ã‚‹ã‹ã‚’判定ã—ã€ãã®IDを出力ã—ã¦ãã ã•ã„。
登録データ:
検索対象ã®å•†å“å(固定):”Banana”
出力例:
商å“å: Banana
商å“ID: 102
Map<Integer, String> を使用ã™ã‚‹ã“ã¨ï¼ˆã‚ーãŒID)public class Main {
public static void main(String[] args) {
MapUtil.findProductIdByName();
}
}
map.containsValue("Banana") ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚ã‚‹ãŒã€å€¤ã«å¯¾å¿œã™ã‚‹ã‚ーをå–ã‚‹ã«ã¯ãƒ«ãƒ¼ãƒ—ãŒå¿…è¦entrySet() ã§ key 㨠value ã‚’ä¸¡æ–¹åŒæ™‚ã«æ‰±ãˆã‚‹â†’è§£ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™