連想配列(マップ/ハッシュ/ディクショナリ)に特定のキーの有無を判定するには

Java、Scala、JavaScript、PHP、Perl、Ruby、Pythonでの連想配列(マップ/ハッシュ/ディクショナリ)に特定のキーが含まれているかどうかを判定する方法。

言語 記述例
Java map.containsKey(key)
Scala map.contains(key)
JavaScript key in obj
PHP array_key_exists($key, $arr)
isset($arr[$key]))
Perl exists($hash{$key})
Ruby hash.has_key?(key)
Python key in dic

関連

Java

boolean Map<K, V>#containsKey(Object key)

Scala

def Map[A, B]#contains(key: A): Boolean

Javaとはメソッド名が違う。

val map = Map("a" -> 1, "b" -> 2, "c" -> 3);
println(map.contains("a"));
// => true
println(map.contains("A"));
// => false

JavaScript

in という演算子を使う。

var map = {a: 1, b: 2}

console.log('a' in map);
// => true
console.log('c' in map);
// => false

in - JavaScript | MDN

PHP

array_key_exists関数またはissetを使う。isset は通常の関数ではなく、PHPの言語構造である。

$arr = array('a' => 1, 'b' => 2);

var_export(array_key_exists('a', $arr)); // => true
var_export(isset($arr['a']));            // => true
var_export(array_key_exists('A', $arr)); // => false
var_export(isset($arr['A']));            // => false

issetは値がNULLの場合に要素が存在していてもFALSEを返してしまう。

$arr = array('a' => 1, 'b' => 2, 'c' => NULL);

if (array_key_exists('c', $arr)) {
  echo "exists\n";
} else {
  echo "not exists\n";
}
// => exists

// NULLと要素が存在しないのとは区別できない
if (isset($arr['c'])) {
  echo "exists\n";
} else {
  echo "not exists or NULL\n";
}
// => not exists or NULL

// 子要素が配列でないのに配列のつもりでアクセスしてもwarning等は発生しない
// isset は関数でなく言語構造だから
if (isset($arr['b']['B'])) {
  echo "exists\n";
} else {
  echo "not exists or NULL\n";
}
// => not exists or NULL

array_key_exists 関数 | PHP Manual
isset | PHP Manual

Perl

if (exists($hash{$key})) {
    ...;
}

レファレンスの場合の例

if (exists($hash_ref->{$key})) {
    ...;
}

defined を使ってしまうと、キーが存在しない場合と、undef が値として保存されている場合の区別ができなくなってしまう。

Ruby

以下の4つのメソッドはすべて同じ意味。

Hash#has_key?(key)
Hash#key?(key)
Hash#include?(key)
Hash#member?(key)

Hash#has_key? (Ruby 3.0.0 リファレンスマニュアル)

Python

Python3ではin演算子を使う。Python2ではin演算子に加えて、has_keyメソッドも同じように使える。どちらもTrueFalseを返す。

dic = {'a': 1, 'b': 2}

print('a' in dic) # => True
print('x' in dic) # => False

# Python3 ではエラーになる
print(dic.has_key('a')) # => True
print(dic.has_key('x')) # => False
このサイトは個人メモの集合です。
スポンサーリンク