Как создать обратный эквивалентный строковый ключ? (чтобы получить сортировку по убыванию) - PullRequest
3 голосов
/ 04 сентября 2011

Предположим, у вас есть int-ключ, который, когда он показан и отсортирован вместе с другими ключами, будет, конечно, отсортирован в порядке натуральных чисел.

Таким образом, для получения "Inverse" вы можете запрограммировать...

int InverseSortKey = Int32.MaxValue - ArbitraryIntKey;

Вопрос: Как получить аналогичное «обратное» значение, но для строк?

Пример:

string InverseSortKey = "ZZZZZZZZZ" - ArbirtraryStringKey; // Of course this don't compile.

Надеюсь, вы получитеидея.

1 Ответ

2 голосов
/ 04 сентября 2011

Наивное решение ( обновлено - работает, если вы знаете максимальную длину всех строк )

String data;
StringBuilder resultBuilder = new StringBuilder(maxLength);
for (int i = 0; i < maxLength; i++)
{
    Char  c = i < data.length ? data[i] : 0;
    resultBuilder.Append(Char.MaxValue - c);
}
String result = resultBuilder.ToString();

Не учитывает тот факт, что сортировка строк может варьироваться в зависимости от культуры и не обязательно соответствует числовым значениям символов. Полное решение будет принимать упорядоченный список всех действительных последовательностей символов Chars (в конкретной ожидаемой кодировке этих строк) по порядку сортировки, а затем для каждого символа выбрать тот, который является обратным.

Дальнейший отказ от ответственности : не используйте это решение, если только вы не можете считать, что строки имеют однобайтовую кодировку и отсортированы точно по порядку номеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...