存储在 ArrayList 中的数组的倒序
Reverse order of the Arrays stored in ArrayList
我正在使用 Processing
和 IGeo
库,我有一个 ArrayList
个 IVec[]
数组:
ArrayList<IVec []> v = new ArrayList<IVec[]>();
ArrayList I
的每个 I
都有一个 IVec []
数组的集合,表示曲线控制点的坐标。我需要反转 IVec []
控制点的顺序以保持与 ArrayList 相同的顺序(我正在尝试反转曲线接缝反转控制点顺序并保持曲线的原始顺序)但我无法理解这该怎么做。
谁能帮帮我?
我不会为您提供完整的解决方案,但会指导您完成它:
- 迭代数组列表
v
- 其中的每一项 (
IVec[]
),
- 将数组转换为集合(例如使用
Arrays.asList
)
- 使用
Collections.reverse
反转列表中的项目
- 将其转换回数组
您可以使用Collections.reverse
你也可以使用栈数据结构。您可以通过 push
将元素放入堆栈来迭代要反转的集合。然后,当您真正想要使用这些元素时,您 pop
堆栈中的每个元素,这将允许您以相反的顺序遍历集合。
试试这个;
- 创建一个 Helper method/function 接受 returns 数组。
- 在 Helper 方法中,使用 Collections.reverse
- return 反转数组。
- 在循环中调用此辅助方法,如下所示:
for(int i = 0; i < OutArray.length; I++)
{ // Here get the inner Array and pass it to Helper method.
// Add the return array to newArray List
}
return newArrayList.
此解决方案有效:
for (int i=0; i<v.size (); i++) {
IVec [] vert=v.get(i);
for (int j=0; j<vert.length/2; j++) {
IVec temp = vert[j];
vert[j]=vert[vert.length -1 - j];
vert[vert.length - 1 - j] = temp;
}
}
这应该可行(不是最有效的方法,但很容易理解):
public static <T> void reverseElements(ArrayList<T[]> list) {
ArrayList<T> tempList = new ArrayList<T>();
for(T[] arr : list) {
tempList.clear();
for(T t : arr)
tempList.add(t);
Collections.reverse(tempList);
tempList.toArray(arr);
arr = tempList.toArray(arr);
}
}
我正在使用 Processing
和 IGeo
库,我有一个 ArrayList
个 IVec[]
数组:
ArrayList<IVec []> v = new ArrayList<IVec[]>();
ArrayList I
的每个 I
都有一个 IVec []
数组的集合,表示曲线控制点的坐标。我需要反转 IVec []
控制点的顺序以保持与 ArrayList 相同的顺序(我正在尝试反转曲线接缝反转控制点顺序并保持曲线的原始顺序)但我无法理解这该怎么做。
谁能帮帮我?
我不会为您提供完整的解决方案,但会指导您完成它:
- 迭代数组列表
v
- 其中的每一项 (
IVec[]
),- 将数组转换为集合(例如使用
Arrays.asList
) - 使用
Collections.reverse
反转列表中的项目 - 将其转换回数组
- 将数组转换为集合(例如使用
您可以使用Collections.reverse
你也可以使用栈数据结构。您可以通过 push
将元素放入堆栈来迭代要反转的集合。然后,当您真正想要使用这些元素时,您 pop
堆栈中的每个元素,这将允许您以相反的顺序遍历集合。
试试这个;
- 创建一个 Helper method/function 接受 returns 数组。
- 在 Helper 方法中,使用 Collections.reverse
- return 反转数组。
- 在循环中调用此辅助方法,如下所示:
for(int i = 0; i < OutArray.length; I++)
{ // Here get the inner Array and pass it to Helper method.
// Add the return array to newArray List
}
return newArrayList.
此解决方案有效:
for (int i=0; i<v.size (); i++) {
IVec [] vert=v.get(i);
for (int j=0; j<vert.length/2; j++) {
IVec temp = vert[j];
vert[j]=vert[vert.length -1 - j];
vert[vert.length - 1 - j] = temp;
}
}
这应该可行(不是最有效的方法,但很容易理解):
public static <T> void reverseElements(ArrayList<T[]> list) {
ArrayList<T> tempList = new ArrayList<T>();
for(T[] arr : list) {
tempList.clear();
for(T t : arr)
tempList.add(t);
Collections.reverse(tempList);
tempList.toArray(arr);
arr = tempList.toArray(arr);
}
}