#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», как в вашем примере.