最近我在面试中遇到了一个问题,我无法为这个问题制定逻辑。我有一个像
这样的数组 [ 1,'a',45,'h',56,'d',2,'t',6,'p' ]
。如何排序这个数组?输出应该是这样的..
intArray = [1,2,6,45,56]
charArray= ['a','d','h','p','t']
如果有人知道它的逻辑,请发表评论。这将是一个很大的帮助。
谢谢!
答案 0 :(得分:2)
一种方法是将整数分开然后排序 -
Object[] objects = new Object[]{ 1,'a',45,'h',56,'d',2,'t',6,'p' };
List integers = new ArrayList<Integer>();
List characters = new ArrayList<Character>();
// Check and store integers and characters
// Doesn't validate and assumes you either have integers or characters
for(Object o : objects){
if(o instanceof Integer){
integers.add(o);
} else {
characters.add(o);
}
}
//Sort them separately
Collections.sort(integers);
Collections.sort(characters);
System.out.println(integers);
System.out.println(characters);
答案 1 :(得分:0)
答案 2 :(得分:0)
以下代码产生了所需的结果:
System.out.println(Arrays.toString(result.get(Integer.class).toArray()));
System.out.println(Arrays.toString(result.get(Character.class).toArray()));
查看结果:
public static class EnumerableExtensions
{
public static bool AllUnique<TSource, TResult>(this IEnumerable<TSource> enumerable,
Func<TSource, TResult> selector)
{
var uniques = new HashSet<TResult>();
return enumerable.All(item => uniques.Add(selector(item)));
}
}
答案 3 :(得分:0)
以下是它的实现。我使用了两个for循环,这样我们就可以很容易地找出两个新子数组的长度,而不是用基数组初始化它; s长度。 我试过不使用除Arrays.sort()之外的任何内置方法。您也可以编写自己的代码来对这两个子数组进行排序。
public static void main(String[] args) {
Object[] array = { 1, 'a', 2, 'f', 5, 'b', 3 };
int intLoc = 0;
int charLoc = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] instanceof Integer) {
intLoc++;
} else {
charLoc++;
}
}
int intArray[] = new int[intLoc];
char charArray[] = new char[charLoc];
for (int i = 0; i < array.length; i++) {
if (array[i] instanceof Integer) {
--intLoc;
intArray[intLoc] = (int) array[i];
} else {
--charLoc;
charArray[charLoc] = (char) array[i];
}
}
Arrays.sort(intArray);
Arrays.sort(charArray);
System.out.println(Arrays.toString(intArray));
System.out.println(Arrays.toString(charArray));
}