Получить строку в самом высоком алфавитном порядке

#c# #string #list

#c# #строка #Список

Вопрос:

Трудно сказать это правильно. В принципе, у меня есть список, и мне нужно получить обратно строку, которая будет последней в этом списке в алфавитном порядке. Например:

Если бы у меня был список:

 { "01", "0a2", "test" }
  

Мне нужно было бы вернуть строку, которая была бы следующей в алфавитном порядке, например «tf»

Комментарии:

1. Вы чего-то хотите alphabetically higher then 'test' ? Не могли бы вы преобразовать их в char и добавить один в код символа,

2. «test» должно быть перед «tf».

Ответ №1:

Это немного банальный ответ, но я надеюсь, что это поможет. Предполагая, что у вас есть ваши строки в отсортированном списке, у меня есть небольшой «быстрый и грязный» метод, который генерирует следующий элемент в алфавитном порядке:

 var items = new System.Collections.Generic.SortedList<string, string>();

items.Add("01", "01");
items.Add("02a", "02a");
items.Add("test", "test");

var nextItem = items.Last().Key;

int pos = nextItem.Length - 1;
while (pos >= 0)
{
   if ((nextItem[pos] != 'z') amp;amp; (nextItem[pos] != 'Z'))
   {
      nextItem = nextItem.Substring(0, pos - 1)    Convert.ToChar(Convert.ToInt32(nextItem[pos])   1)   nextItem.Substring(pos   1);
      break;
    }
    pos--;
 }

 if (pos == -1)
 {
    nextItem  = "a";
 }
  

Комментарии:

1. Интересный ответ. Позвольте мне попробовать это 🙂

2. У меня небольшая проблема.. Вот что в итоге получается: screensnapr.com/v/bI2nyb.png — Все начинается нормально, а затем заканчивается повторением одного и того же снова и снова. Есть идеи?

Ответ №2:

вы не говорите, на каком языке?

в большинстве языков есть функция сортировки массивов, которая сортирует по алфавиту. просто выполните сортировку, затем выберите последний элемент массива.

Комментарии:

1. Я знаю, как сортировать, но мне нужно создать НОВУЮ строку, которая будет больше в алфавитном порядке, чем те, что в массиве…

Ответ №3:

Если вы всегда хотите, чтобы строка была в алфавитном порядке «последней» после всех существующих строк, это должно сработать 😉

 var words = new []{"01","0a2","test"}; 

int maxLength = words.ToList().Max(x => x.Length);

string newWord ="";

for(int i=0;i<maxLength  1;i  ){

  newWord = "z";            

}
  

Комментарии:

1. слово после «test» — в алфавитном порядке — «tesu», а не «testz», как в вашем примере.