programing

2개의 어레이 리스트를 같은 방법으로 랜덤화하는 방법

firstcheck 2022. 7. 4. 23:56
반응형

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

반응형