連想配列(マップ/ハッシュ/ディクショナリ)に特定のキーの有無を判定するには 2021/01/14
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 2021/01/14
Scala 2014/12/20
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 2021/01/14
in
という演算子を使う。
例
var map = {a: 1, b: 2}
console.log('a' in map);
// => true
console.log('c' in map);
// => false
PHP 2016/08/04
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
Perl 2014/02/26
例
if (exists($hash{$key})) {
...;
}
レファレンスの場合の例
if (exists($hash_ref->{$key})) {
...;
}
defined
を使ってしまうと、キーが存在しない場合と、undef
が値として保存されている場合の区別ができなくなってしまう。
Ruby 2021/01/14
以下の4つのメソッドはすべて同じ意味。
Hash#has_key?(key)
Hash#key?(key)
Hash#include?(key)
Hash#member?(key)
Python 2014/09/07
Python3ではin
演算子を使う。Python2ではin
演算子に加えて、has_key
メソッドも同じように使える。どちらもTrue
かFalse
を返す。
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