トップ «前の日記(2004-12-20) 最新 次の日記(2004-12-22)» 編集

じじぃの日記、ツッコミ可

Twitter: @jijixi_org
Xbox Live: jijixi

初心者が書いた OCaml 入門
Spotlight tips サイト内リンク集
1970|01|02|
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|11|
2011|05|
2012|01|

2004-12-21 ぐあぁ… [長年日記]

% [本日のリンク元] google 検索 (Vector 添字 2次元配列 java)

これは何が調べたかったのかなあ。Vector (と言うかまあ List 全般だろう) で二次元配列を作ると、添字の指定の仕方がウザいって話でしょうかね。たしかにねえ、こんな感じだし。

import java.util.List;
import java.util.ArrayList;
 
public class ListTest {
   public static void main(String[] args) {
      List lst = new ArrayList();
 
      // ary[5][3] に相当するものを作るとすれば…
      for (int i = 0; i < 5; i++) {
         lst.add(new ArrayList());
         for (int j = 0; j < 3; j++) {
            ((List)lst.get(i)).add(null);
         }
      }
 
      // 添字でアクセス
      // ary[3][2] に何かを入れるなら…
      ((List)lst.get(3)).set(2, "hoge");
      System.out.println(((List)lst.get(3)).get(2));
   }
}

% Lisp かよ…ってくらいカッコ地獄ですな(苦笑)。パッと見何やってるかわかりづらいし。もし、これが Ruby や Objective-C のような言語だったら…

...
   // 添字でアクセス
   lst.get(3).set(2, "hoge");
   System.out.println(lst.get(3).get(2));
...

% …くらいで書けるのにね。これならまだガマンできる範囲かな。まあ、わしなら、ほんとに List を使った二次元配列が必要であれば、そのためのクラスを書きますね。こんなウザいの、いちいち書いてられん。

って言うか、その前に、ほんとうに両方の次元が List である必要があるかどうかを考えた方が良いかも。List の嬉しいところってのは、要するに簡単に伸び縮みさせられるってところなわけで、もし伸び縮みする必要が無いなら普通の配列を使った方が絶対楽だ。二次元配列って、大抵どっちか (あるいは両方) の次元は大きさ固定じゃないですか?

もし、Java に可変長引数があれば、汎用の多次元配列クラスを作ってみてもおもしろいんだけど……無いからなあ。まあ、添字を new int[] { 3, 5, 8 } みたいな配列で渡す (タプルみたいに) 方式にすれば何とかなりそうだけど、それはそれで何だか不毛(苦笑)。もちろん、いちいち new するんじゃなく配列を用意しておいても良いが、違う添字を使うたびにそれを代入する作業が入るのもクールじゃないなあ。

お名前:
E-mail:
コメント:

トップ «前の日記(2004-12-20) 最新 次の日記(2004-12-22)» 編集

日記ってのは本来、自分で読み返すためにあるもんだよなあ……
もしくは有名人になったら死後に本になったりとかか?

RSS はこちら

jijixi at azito.com