私は2つの配列を持っています:
arrayA = {"b","c","a"}
arrayB = {"99","11","22"}
どうすればそれらを一緒に並べ替えることができarrayA = {"a","b","c"}
ますarrayB = {"22","99","11"}
か?
英数字の並べ替えプログラムを1つ作成しました。チェックしてください。
import java.util.Arrays;
import java.util.Comparator;
public class AlphanumericSorting implements Comparator {
public int compare(Object firstObjToCompare, Object secondObjToCompare) {
String firstString = firstObjToCompare.toString();
String secondString = secondObjToCompare.toString();
if (secondString == null || firstString == null) {
return 0;
}
int lengthFirstStr = firstString.length();
int lengthSecondStr = secondString.length();
int index1 = 0;
int index2 = 0;
while (index1 < lengthFirstStr && index2 < lengthSecondStr) {
char ch1 = firstString.charAt(index1);
char ch2 = secondString.charAt(index2);
char[] space1 = new char[lengthFirstStr];
char[] space2 = new char[lengthSecondStr];
int loc1 = 0;
int loc2 = 0;
do {
space1[loc1++] = ch1;
index1++;
if (index1 < lengthFirstStr) {
ch1 = firstString.charAt(index1);
} else {
break;
}
} while (Character.isDigit(ch1) == Character.isDigit(space1[0]));
do {
space2[loc2++] = ch2;
index2++;
if (index2 < lengthSecondStr) {
ch2 = secondString.charAt(index2);
} else {
break;
}
} while (Character.isDigit(ch2) == Character.isDigit(space2[0]));
String str1 = new String(space1);
String str2 = new String(space2);
int result;
if (Character.isDigit(space1[0]) && Character.isDigit(space2[0])) {
Integer firstNumberToCompare = new Integer(Integer
.parseInt(str1.trim()));
Integer secondNumberToCompare = new Integer(Integer
.parseInt(str2.trim()));
result = firstNumberToCompare.compareTo(secondNumberToCompare);
} else {
result = str1.compareTo(str2);
}
if (result != 0) {
return result;
}
}
return lengthFirstStr - lengthSecondStr;
}
public static void main(String[] args) {
String[] alphaNumericStringArray = new String[] { "NUM10071",
"NUM9999", "9997", "9998", "9996", "9996F" };
Arrays.sort(alphaNumericStringArray, new AlphanumericSorting());
for (int i = 0; i < alphaNumericStringArray.length; i++) {
System.out.println(alphaNumericStringArray[i]);
}
}
}
出力は次のとおりです。
9996 9996F 9997 9998 NUM9999 NUM10071
を使用しArrays.sort(arrayB)
ます。並べ替えに影響を与えるカスタムComparator
を提供することもできます。
このリンクは、array.sort(Arg);を試すのに役立ちます。 http://www.leepoint.net/notes-java/data/arrays/70sorting.html
あなたが使用することができます
Arrays.sort(arrayB);
出力は
C1
C2
C3
arrayB = {"22","99","11"}
Arrays.sort(arrayB);
出力:
11
22
99
同じ文字を使用し、0 から 9 までの 1 桁のみを使用する場合は、最初の配列を並べ替えたのと同じ方法で並べ替えることができます。より多くの数字でより多くの文字を投入する場合は、独自のカスタム コンパレータを実装する必要があります (デフォルトの動作が適切でない場合)。
書かれている質問への答えは非常に明白であるように思われるので、あなたが本当に求めていることを理解していないと思います.
あなたが本当に求めているのは、ある配列をソートし、ソートが最初の配列をどのように並べ替えたかに基づいて2番目の配列を並べ替える方法だと思います。(あなたの例は、これを説明するために選択されていません...しかし、実際にはこれを行っています。)
これを行う最も簡単な方法は、2 つの配列をペアの 1 つの配列に変換し、最初のフィールドに基づいてペアを並べ替え、並べ替えられたペア リストを使用して元の配列を再作成することです。
(可能性のある) 問題は、並べ替えが安定していない場合、2 番目の配列の全体的な順序が不確定になることです。(別の言い方をすれば、 に重複がある場合arrayA
、対応する要素の相対的な順序はarrayB
予測できません。) これを処理する方法があります。