2012-03-03 3 views
0

그래서 배열이 3 개 있고 그 중 하나가 문자열 배열이고 2 개가 int 배열입니다.여러 배열 정렬

이제 정렬 할 때 모두 정렬해야합니다. 예를 들어

:

String[] stringarr = {"a", "z", "b"}; 
int[] intarra = {5, 8, 2}; 
int[] intarrb = {0, 7, 1}; 

내가 원하는 것은 intarra별로 정렬하는 것입니다.

내가 사용할 수 있습니다

intarra == {2, 5, 8}; 

를 반환하지만

stringarr == {"b", "a", "z"}; 
intarrb == {1, 0, 7}; 

가 아니면 다른 뭔가를 사용해야 함을 저장할 수 있도록 다른 배열을 정렬에 대해 어떻게 갈 것이라고

Arrays.sort(intarra); 

자료?

문자열 배열은 이벤트 제목이며 int 배열은 이벤트 시간입니다.

+1

실제로 데이터를 저장하는 방법을 변경해야합니다. 왜 3 개의 속성을 가진 MyEvent 클래스를 만들고 MyEvent 객체를 단일 배열에 저장해야합니까? 그런 다음 기본 사용자 지정 비교기를 구현하여이 배열을 정렬 할 수 있습니다. –

답변

1

간단합니다. 배열 (배열 목록, 배열 배열 또는 배열 var 인수)을 취할 방법을 작성하고 다른 배열의 요소 색인도 변경되는 결과를 먼저 정렬해야합니다.

+0

왜 downvote ...? – dantuch

+0

첫 번째 배열을 정렬하면 정렬 된 첫 번째 배열이됩니다. 다른 배열을 정렬하는 방법은 OP가 묻는 것입니다. – yurib

2

OOP를 사용하면 쉽게 할 수 있습니다. 데이터가 포함 된 구조를 만들고 정렬 방법을 지정하십시오.

public class MyStructure implements Comparable 
{ 
    public String string; 
    public int int1; 
    public int int2; 

    public int compareTo(Object obj) 
    { 
      if (obj instanceof MyStructure) 
      { 
       return ((MyStructure) obj.int1) - int1; 
      } 
      return 0; 
    } 

} 

이제 이러한 구조의 배열을 만들고 해당 배열을 정렬하십시오.

+0

int 필드를 정렬하려면 어떻게해야합니까? – ManojGumber

+0

** ** int 필드를 정렬하는 중입니다 ... –

+0

저는 Comparable을 사용하여 특정 필드 만 정렬하도록 묶여 있다고 말합니다. 그러나 현재의 유스 케이스에서 그는 세 분야 중 하나를 분류하려고 할 수 있습니다. – ManojGumber

0

자바는 3 개의 개별 배열을 유지하는 대신 객체 목록을 만들고 객체를 정렬하는 데 Collections.sort()을 사용합니다 (유스 케이스에서 가능한지 확실하지 않음). 따라서 모든 속성은 항상 동기화됩니다. 귀하의 개체 Comparable 인터페이스를 구현해야하며, 따라서 당신은 compareTo() 방법

public class MySortable implements Comparable { 
    private String strVal; 
    private int intVala; 
    private int intValb; 

    public int compareTo(MySortable other) { 
     // Use Integer's compareTo method instead of writing your own logic 
     return Integer.valueof(intVala).compareTo(Integer.valueOf(other.intVala)); 
    } 
} 
0

당신이 언급 한 세 가지 fiels을 캡슐화하는 클래스를 만듭니다에게 무시하도록 강요 될 것이다. 당신은 문자열 또는 정수에 정렬하려는 경우에 따라 다음

class MyClass{ 
String input: 
int a; 
int b; 
} 

는 해당 필드에 비교하면 정렬 된 배열을 줄 것이다 적절한 Comparator를 만들 수 있습니다.

ArrayList<MyClass> a; 
Collections.sort(a, new Comparator<MyClass> { 
int compareTo(MyClass a, MyClass b){ 
a.getInt1()-b.getInt2(); 
} 

비교기 사용의 이점은 사용 사례에 따라 스팅과 정수 모두를 정렬 할 수 있다는 것입니다.

0

Jixi는 "또는 데이터를 저장하기 위해 다른 것을 사용해야합니까?"라고 물었습니다.

예. 세 가지를 모두 저장하는 새 클래스를 만드는 것이 좋습니다.

public class TimedEvent implements Comparable<TimedEvent> { 
    String title; 
    int time1, time2; 

    public TimedEvent(String name, int t1, int t2) { 
     title = name; 
     time1= t1; 
     time2=t2; 
    } 

    public int compareTo(TimedEvent otherEvent) { 
     return title.compareTo(otherEvent.title); 
    } 
} 

지금 배열.종류는 당신을 위해 작동합니다

TimedEvent[] eventArray = new TimedEvent[5000]; 
// lots of events get stored. 
eventArray[0] = new TimeEvent("Start", 125,134); 
eventArray[1] = new TimeEvent("FireClose", 128,139); 
eventArray[2] = new TimeEvent("Important Action", 1328,1339); 

Arrays.sort(eventArray) 

참고가 초기화되지 않는 배열의 요소가 null 것하고 정렬 할 때이 예외를 던질 것입니다. 따라서 배열의 길이가 정확히 필요한지 확인하십시오. 미리 저장할 이벤트 수를 모를 경우 대신 ArrayList를 사용하십시오.

ArrayList<TimedEvent> eventList = new ArrayList<>(); //java7 syntax. use       
           // new ArrayList<TimedEvent>(); if using Java 6. 
// lots of events get stored. 
eventList.add(new TimeEvent("Start", 125,134)); 
eventList.add(new TimeEvent("FireClose", 128,139)); 
eventList.add(new TimeEvent("Important Action", 1328,1339)); 

Collections.sort(eventList); 
+0

나는이 일을 얻으려고 노력하고있어 어떻게 eventarray 내 이벤트를 설정합니까? TimedEvet.title = eventtitle 등을 사용했습니다. 하지만 모두 null입니다. – Jixi

+0

내 업데이트 대답을보세요. 먼저 개체를 만들어 필드를 설정해야합니다. 그래서 내가 작성한 생성자를 사용하거나 기본 생성자를 만든 다음 TimedEvent te = new TimedEvent();를 작성합니다. te.title = "고정"; – Thorn