[英]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.