整数ではなく文字 (「a」から「z」) でインデックス付けされた配列を Java で作成することは可能ですか?
このような配列「a」では、たとえば、このように使用したいと思います
print (a['a']);
Javaで、整数ではなく文字('a'から'z')でインデックス付けされた配列を作成することは可能ですか?
もちろん可能です。
あなたはこのようにこれを行うことができます:
char theChar = 'x';
print (a[theChar - 'a']);
または、ASCII文字列のみを処理すると仮定すると、サイズ256の配列を宣言するだけです。文字を使用して配列に直接インデックスを付けます。
char[] a = new char[256];
char theChar = 'x';
print (a[theChar]);
これで、大文字/小文字かどうかは関係ありません。実際、ASCII文字列に特に
関心がある場合は、単純な配列と比較して、を使用するのはやり過ぎかもしれません。配列はそれほど多くのスペースを浪費せず、おそらく(非常に効率的な構成)はそのような単純なタスクには多すぎます。Map
Map
Map
代わりにaを使用してください。
Map<Character, Object> myMap = new HashMap<Character, Object>();
myMap.put('a', something);
print(myMap.get('a'));
一方、他の人がすでに示唆しているように、char をインデックスとして使用できます (ただし、すべての配列要素を0...'a'-1
空のままにします)。
String[] a = new String['z' + 1];
a['a'] = "Hello World";
System.out.println(a['a']);
26 要素の配列を作成し、常に'a'
char インデックスから減算できます。
int[] array = new int[26];
array['a'-'a']=0;
array['b'-'a']=1;
\\ etc...
このような単純なものはどうですか?
public static int getLetterValue(char letter) {
return (int) Character.toUpperCase(letter) - 64;
}
そしてそれをそのように使用します:
System.out.println(a[getLetterValue('a'));
現時点では、これはかなり失敗します。範囲内などを確認する必要があります。
または、Javaリストインターフェイスを実装し、.getメソッドと.addメソッドをオーバーライドして、charを使用できるようにすることもできます。しかし、それは私の次のポイントに私をもたらします。
例外をより適切に処理し、そのようなユースケース向けに設計されたデータ構造を使用することをお勧めします。マップははるかに良い選択です。
はいといいえ。はい、できます。コンパイルされます。次のコードを試してください。
class foo {
public static void main(String[] args) throws Exception {
int a[] = new int[100];
a['a'] = '1';
System.out.printf("%d\n", a['a']);
}
}
いいえ、charsは暗黙的にintに変換されるため、探しているものとは異なります。
探しているデータ構造はMap
、Java ランドで呼び出されます。
このデータ構造は、PHP の連想配列など、さまざまな名前で知られています。C#、Python の辞書。この種の混乱につながるRubyなどのハッシュ。
いいえ、できません。状況では、Map
代わりに使用する必要があります。
これは重複した質問だと思います!Java は文字列をインデックス配列キーとして使用できますか?を参照してください。(例: 配列["a"]=1;) .
マップを使用して文字を値にマップし、get を呼び出して値を取得する必要があります。