Не то, чтобы мой ответ мог быть или не быть более «эффективным», но когда я прочитал ваш код, вы подсчитали, сколько цифр в вашем номере, чтобы вы могли определить, насколько велики сделать ваш массив, а затем вы рассчитали, как верните свой массив в отсортированное целое число.
Мне кажется, что вы захотите написать свой собственный код, который выполнил сортировку без использования встроенных функций, что и делает мой образец. Кроме того, я добавил возможность сортировки в порядке возрастания или убывания, что также легко добавить в ваш код.
Оригинальный алгоритм отсортировал цифры, теперь это сортирует цифры так, чтобы конечный результат был самым большим или наименьшим в зависимости от второго переданного параметра. Однако при работе с отрицательным числом второй параметр рассматривается как противоположный.
using System;
public class Program
{
public static void Main()
{
int number1 = 2927466;
int number2 = 12492771;
int number3 = -39284925;
Console.WriteLine(OrderDigits(number1, false));
Console.WriteLine(OrderDigits(number2, true));
Console.WriteLine(OrderDigits(number3, false));
}
private static int OrderDigits(int number, bool asc)
{
// Extract each digit into an array
int[] digits = new int[(int)Math.Floor(Math.Log10(Math.Abs(number)) + 1)];
for (int i = 0; i < digits.Length; i++)
{
digits[i] = number % 10;
number /= 10;
}
// Order the digits
for (int i = 0; i < digits.Length; i++)
{
for (int j = i + 1; j < digits.Length; j++)
{
if ((!asc && digits[j] > digits[i]) ||
(asc && digits[j] < digits[i]))
{
int temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
}
// Turn the array of digits back into an integer
int result = 0;
for (int i = digits.Length - 1; i >= 0; i--)
{
result += digits[i] * (int)Math.Pow(10, digits.Length - 1 - i);
}
return result;
}
}
Результаты:
9766422
11224779
-22345899
См. рабочий пример здесь ... https://dotnetfiddle.net/RWA4XV
<workflow-app name='hello-wf' xmlns="uri:oozie:workflow:0.4">
<parameters>
<property>
<name>inputDir</name>
</property>
<property>
<name>outputDir</name>
<value>out-dir</value>
</property>
</parameters>
...
<action name='firstjob'>
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.mapper.class</name>
<value>com.foo.FirstMapper</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>com.foo.FirstReducer</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>${inputDir}</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>${outputDir}</value>
</property>
</configuration>
</map-reduce>
<ok to='secondjob'/>
<error to='killcleanup'/>
</action>
...
</workflow-app>
В приведенном выше примере, если inputDir не указан, Oozie выведет сообщение об ошибке вместо отправки задания. If = outputDir = не указан, Oozie будет использовать значение по умолчанию, out-dir.