2011-03-26 3 views
0
for (a = 0; a < filename; a++) { 
    Map<Double,String> m = new HashMap<Double,String>(); 

    String pre = "abc"; 
    String post = ".txt"; 
    for (int ii = 0; ii < 11; ii++) { 
     m.put(similarityScore[a],pre + a + post + '\n'); 
    } 
    SortedSet<Double> set = new TreeSet<Double>(m.keySet()); 
    for (Double d : set) { 
     System.out.println(d + " " + m.get(d)); 
    } 
    } 

예 출력 :값과 함께 오는 이름과 함께 값을 정렬하는 방법은 무엇입니까?

The resulting similarity score of the query how [INITIAL OUTPUT] 

abc0.txt = 0.5773502691896258 

abc1.txt = 0.5773502691896258 

abc2.txt = 0.5773502691896258 

abc3.txt = NaN 

abc4.txt = 0.5773502691896258 

abc5.txt = NaN 

abc6.txt = NaN 

abc7.txt = NaN 

abc8.txt = NaN 

abc9.txt = 0.5773502691896258 

abc10.txt = NaN 

Similarity score sorted **DESIRED** output : 


0.5773502691896258 abc0.txt 

0.5773502691896258 abc1.txt 

0.5773502691896258 abc2.txt 

0.5773502691896258 abc4.txt 

0.5773502691896258 abc9.txt 

NaN     abc3.txt 

NaN     abc5.txt 

NaN     abc6.txt 

NaN     abc7.txt 

NaN     abc8.txt 

NaN     abc10.txt 

가 어떻게 텍스트 파일의 유사성 점수와 병합 할 수 있을까요 심지어 ofter 분류? 다른 의미에서 정렬 후에도 각 개별 텍스트 파일의 출력 표시는 개별 점수를 따릅니다.

+0

이는 제쳐두고 그냥,하지만 _resultArea'는'StringBuilder'입니다'가정, 그것은'_resultArea.append를 (사용하는 어리석은 someStr + someOtherStr)'. 컴파일러는'someStr'을'someOtherStr'에 추가 할 목적으로 새로운 StringBuilder를 생성합니다. 당신은'_resultArea.append (someStr) .append (someOtherStr);을하는 것이 더 낫다.'Yay Builder pattern !! :-D – corsiKa

답변

0

가장 쉬운 (또는 가장 직접적인) 컬렉션 및 비교기를 사용하는 것 같습니다.

값을 맵에 넣은 다음 두 번 정렬하십시오. 그것은 심지어 자연 정렬 순서 일 수 있으므로 비교자를 작성할 필요가 없습니다.

Map<Double,String> m = new HashMap<Double,String>(); 

String pre = "abc"; 
String post = ".txt"; 
for (int ii = 0; ii < 10; ii++) { 
    m.put(Math.random(),pre + ii + post); 
} 
SortedSet<Double> set = new TreeSet<Double>(m.keySet()); 
for (Double d : set) { 
    System.out.println(d + " " + m.get(d)); 
} 

이렇게하면 정렬 된 출력이 (낮은 값에서 높음) 반환되며 쉽게 되돌릴 수 있습니다.

- 영업 이익의 수정 된 코드 사용하여 표시하는 편집 :

// Initialize variables 
String pre = "abc"; 
String post = ".txt"; 
Map<Double,String> m = new HashMap<Double,String>(); 

// Add data to your map 
for (int a = 0; a < filename; a++) { 
    m.put(similarityScore[a],pre + a + post + '\n'); 
} 

// sort the map keyset and print out the sorted results 
SortedSet<Double> set = new TreeSet<Double>(m.keySet()); 
for (int ii = set.size(); ii >= 0; --ii) { 
    System.out.println(set.get(ii) + " " + m.get(d)); 
} 
+0

안녕하세요, 귀하의 제안에 따라 내 프로그램을 편집하지만 그것이 가지고있는 가치를 정렬하지 않는 것 같습니다. 내 실수 야? 감사. – jasper

+0

for 루프가 잘못 중첩되어 있습니다. 상단에있는 파일을 반복 할 경우 내부에서 반복 할 필요가 없습니다. 첫 번째 내부 루프에서 해시에 동일한 "점수"를 여러 번 효과적으로 추가합니다. 두 번째 interior for 루프에서는 이미지도에있는 값만 정렬합니다. 최악의 경우, 당신은 map/inside/your for loop를 만들고 있습니다. 그래서지도를 만들고, 거기에 하나의 값을 여러 번 추가합니다 (지도에서 하나의 값만 추가합니다). 하나의 값을 정렬 한 다음 인쇄합니다. 하나의 가치. 그런 다음 몇 번이고 반복합니다. – AndyMac

+0

내 대답에 코드 추가 – AndyMac

관련 문제