簡體   English   中英

可變數目的二維數組變成一個大數組

[英]Variable number of two-dimensional arrays into one big array

我有可變數量的二維數組。 第一維是可變的,第二維是恆定的。 即:

Object[][] array0 = {
{"tim", "sanchez", 34, 175.5, "bla", "blub", "tim@tim.com"},
{"alice", "smith", 42, 160.0, "la", "bub", "alice@sdf.com"},
...
};

Object[][] array1 = {
{"john", "sdfs", 34, 15.5, "a", "bl", "john@tim.com"},
{"joe", "smith", 42, 16.0, "a", "bub", "joe@sdddf.com"},
...
};

...

Object[][] arrayi = ...

我用for循環生成這些數組:

 for (int i = 0; i < filter.length; i++) {
  MyClass c = new MyClass(filter[i]);
  //data = c.getData();
 }

其中“過濾器”是另一個數組,其中填充有告訴“ MyClass”如何填充數組的信息。 “ getData()”返回i個數組之一。

現在,我只需要將所有內容都放在一個大的二維數組中。 即:

Object[][] arrayComplete = {
{"tim", "sanchez", 34, 175.5, "bla", "blub", "tim@tim.com"},
{"alice", "smith", 42, 160.0, "la", "bub", "alice@sdf.com"},
...
{"john", "sdfs", 34, 15.5, "a", "bl", "john@tim.com"},
{"joe", "smith", 42, 16.0, "a", "bub", "joe@sdddf.com"},
...
...
};

最后,我需要一個2D數組來填充Swing TableModel。

關於如何做到這一點的任何想法? 現在在我的腦海。

如果您開始考慮對象和集合而不是數組,那么您的頭將大大減少。 認真地講,像這樣的數組真的很快變得太復雜了! 這就是發明OO編程的真正原因。

從最簡單的對象開始:用戶。 用戶似乎包含姓氏和名字,年齡,其他內容和電子郵件地址。

現在,您擁有所有用戶了嗎? 瑣碎的管理!

然后,您必須將該用戶組映射到秋千表模型。 一個簡單的toArray()方法可以返回您想要的一維數組。 從這些數組創建二維數組應該很容易,等等。(盡管我不確定要使用二維數組)

另外,創建一個使用Object []的Person構造函數,這樣您就不必更改創建對象的方式-將它們創建為數組實際上是非常有效的。

如果在那之后仍然令人困惑,我們應該弄清楚為什么要向您的表模型提供數組-真的有必要嗎? 通常,對象集合將更易於管理。

(很抱歉,多次編輯。以某種方式,在點擊保存后我總是會注意到更多...)

我知道Swing表使用數組,但這並不意味着您也應該這樣做!

按照Bill的描述進行操作,然后將數據細分為對象類,然后一次將其饋送到表中。 這將使您的數據表示形式更好。

擺動僅用於“顯示”和“輸入”。 它既不應該是存儲數據的地方,也不應該是您如何表示數據的地方。

您應該聽取其他人的建議,但是如果您堅持要做原本打算做的事情,則可以這樣做:

public static Object[][] concat(Object[][]... arrays) {
    int length = 0;
    for (Object[][] comp : arrays) {
        length += comp.length;
    }
    Object[][] ret = new Object[length][];
    int offset = 0;
    for (Object[][] comp : arrays) {
        System.arraycopy(comp, 0, ret, offset, comp.length);
        offset += comp.length;
    }
    return ret;
}

現在,例如,您可以執行以下操作:

    Object[][] arr1 = {
        { "A" },
        { "B" },
    };
    Object[][] arr2 = {
        { "1" },
        { "2" },
    };
    Object[][] arr3 = {
        { "x", "x" },
        { "y", "y" },
    };
    Object[][] all = concat(arr1, arr2, arr3);
    System.out.println(Arrays.deepToString(all));
    // prints "[[A], [B], [1], [2], [x, x], [y, y]]"

您也可以像這樣使用它:

    Object[][] all = new Object[0][];
    all = concat(all, arr1);
    all = concat(all, arr2);
    all = concat(all, arr3);
    // :
    // maybe more... like in a loop

    System.out.println(Arrays.deepToString(all));
    // prints "[[A], [B], [1], [2], [x, x], [y, y]]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM