2개의 어레이 리스트를 같은 방법으로 랜덤화하는 방법
는 2개의 목록을 있습니다.filelist
★★★★★★★★★★★★★★★★★」imgList
「e1.jpg」는, 「H1.txt」로 설정되어 있습니다.「」의 를 .imgList
의 임의 fileList
엑셀처럼 특정 컬럼을 정렬하면 다른 컬럼이 자동으로 이어지나요?
String [] file = {"H1.txt","H2.txt","H3.txt","M4.txt","M5.txt","M6.txt"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));
String [] img = {"e1.jpg","e2.jpg","e3.jpg","e4.jpg","e5.jpg","e6.jpg"};
ArrayList<String> imgList = new ArrayList<String>(Arrays.asList(img));
//randomized files
Collections.shuffle(fileList);
랜덤화 후의 출력. 예:
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
의도된 출력:
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
두 번 사용, 두 번 사용Random
'CHANGE: 'CHANGE: 'CHANGE:
long seed = System.nanoTime();
Collections.shuffle(fileList, new Random(seed));
Collections.shuffle(imgList, new Random(seed));
의 2개 사용Random
같은 시드를 가진 오브젝트를 사용하면 두 리스트가 완전히 같은 방법으로 섞일 수 있습니다.이를 통해 두 개의 개별 컬렉션을 사용할 수 있습니다.
또는 로 수 로 랩합니다.List
그 물건들.
public class Data {
private String txtFileName;
private String imgFileName;
// Add/generate c'tor, getter/setter, equals, hashCode and other boilerplate.
}
사용 예:
List<Data> list = new ArrayList<Data>();
list.add(new Data("H1.txt", "e1.jpg"));
list.add(new Data("H2.txt", "e2.jpg"));
// ...
Collections.shuffle(list);
가장 간단한 방법은 이미지와 파일을 모두 포함하는 유형으로 두 값을 캡슐화하는 것입니다. 다음 런음음 an 를 만들고,ArrayList
그걸 섞어서 섞으면 돼요.
따라서 캡슐화도 개선되어 이미지와 동일한 수의 파일을 자동으로 보유할 수 있는 속성이 제공됩니다.
이 아이디어가 정말 마음에 들지 않는 경우, 셔플 코드를 직접 작성하고(스택 오버플로우를 포함해 Java에서 변경된 Fisher-Yates 셔플의 많은 예가 있습니다) 양쪽 목록에서 동시에 조작하는 것이 좋습니다.그러나 캡슐화 개선 접근 방식을 사용할 것을 강력히 권장합니다.
지도에서 이 작업을 수행할 수 있습니다.
Map<String, String> fileToImg:
List<String> fileList = new ArrayList(fileToImg.keySet());
Collections.shuffle(fileList);
for(String item: fileList) {
fileToImf.get(item);
}
이렇게 하면 영상이 랜덤 순서로 반복됩니다.
이는 셔플 방식을 사용하여 수행할 수 있습니다.
private List<Integer> getJumbledList() {
List<Integer> myArrayList2 = new ArrayList<Integer>();
myArrayList2.add(8);
myArrayList2.add(4);
myArrayList2.add(9);
Collections.shuffle(myArrayList2);
return myArrayList2;
2개의 문자열 배열을 갖는 대신 2개의 문자열을 포함하는 커스텀클래스의 배열을 1개 만듭니다.
0 ~ 5 의 숫자를 포함한 배열을 작성해, 그것들을 셔플 할 수 있습니다.그런 다음 결과를 "oldIndex -> newIndex" 매핑으로 사용하여 이 매핑을 원래 어레이에 적용합니다.
"자동"이 무엇을 의미하는지 정확히 알 수 없습니다. 두 개체를 모두 포함하는 컨테이너 개체를 만들 수 있습니다.
퍼블릭 클래스 File Image홀더 {String fileName; String imageName; //TODO: 여기에 내용 삽입}
그런 다음 어레이 목록에 넣고 어레이 목록을 랜덤화합니다.
그렇지 않으면 한 목록에서 각 요소가 이동한 위치를 추적하고 다른 목록에서도 이동해야 합니다.
원소를 섞은 후에 이전 원소의 인덱스를 복구할 방법이 없다면 다음 두 가지 방법 중 하나를 사용할 수 있습니다.
A) 다른 리스트를 multi_shuffler = [0, 1, 2, ..., file.size()]로 만들어 셔플합니다.여기에 루프하면 셔플된 파일/이미지 목록의 순서를 확인할 수 있습니다.
ArrayList newFileList = new ArrayList(), ArrayList newImgList = newArrayList(), for (i=0; i)
또는 B) String Wrapper 클래스를 만들고 파일/이미지 이름을 유지하며 이미 가져온 두 목록을 하나로 결합합니다. Array List combined List;
언급URL : https://stackoverflow.com/questions/4228975/how-to-randomize-two-arraylists-in-the-same-fashion
'programing' 카테고리의 다른 글
Java 8: 스트림에 예외를 두는 방법을 사용하는 방법은 무엇입니까? (0) | 2022.07.05 |
---|---|
C와 임베디드 C의 차이점은 무엇입니까? (0) | 2022.07.04 |
VUE를 사용하는 알 수 없는 사용자 지정 요소 (0) | 2022.07.04 |
Vuex를 통한 세분화된 조직 (0) | 2022.07.03 |
인라인 어셈블리 언어가 네이티브 C++ 코드보다 느립니까? (0) | 2022.07.03 |