2013-03-12 101 views
-2

我需要將數組中的特定元素複製到新數組中。例如: 一系列水果包括蘋果和橙子,我想從它得到的蘋果只有一個叫做蘋果的新陣列。複製特定數組元素

謝謝。

+7

你到目前爲止試過了什麼? – SudoRahul 2013-03-12 15:56:21

+0

創建一個列表,迭代數組,將蘋果添加到List,調用List.toArray()。 – Kai 2013-03-12 16:00:19

回答

1

我會建議使用ArrayList。使用ArrayList,您可以動態添加項目。如果你還想要一個蘋果數組, Apple[] arrayOfApples = apples.ToArray();

+1

爲什麼不爲'(水果水果:水果)'? – Kai 2013-03-12 16:04:37

+1

不要惹惱你,但水果將是空的:P,是的使用foreach它更安全,在Java中,我們通常在for循環後面加上大括號 – 2013-03-12 16:05:12

+0

這也適用。 – 2013-03-12 16:05:27

2

您可以使用instanceof運算符來檢查水果是否是Apple。之後,只需對數組進行迭代,將選定的元素添加到另一個數組中。

2

所有的僞代碼:

的第一件事情,你可以這樣做:

Fruit[] oArray = ....; 
int noOfApple = 0; 

for each Fruit f in oArray { 
    if (f is apple) { 
    noOfApple++; 
    } 
} 

Fruit[] newArray = new Fruit[noOfApple]; 

int index = 0; 
for each Fruit f in oArray { 
    if (f is apple) { 
    newArray[index++] = f; 
    } 
} 

好,因爲你明確地創建新的數組,所以你必須找出大小,然後才能真正創建新的數組。爲了更方便,你可以這樣做

List<Fruit> newFruits = new ArrayList<Fruit>(); 
for each Fruit f in oArray { 
    if (f is apple) { 
    newFruits.add(f); 
    } 
} 
Fruit[] newArray = newFruits.toArray(); 

我想提示應該已經是綽綽有餘

更如果你想要做的事更酷,嘗試使用番石榴。你可以做類似的事情(大部分代碼都是實際的,帶有僞代碼):

Fruit[] result = 
    Iterables.filter(Array.asList(oArray), 
        new Predicate<Fruit>(){ 
        @Override 
        boolean apply(Fruit f) { return (f is apple);} 
        }) 
      .toArray();