2013-03-12 73 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();