Я думаю, вы должны подумать один или два раза, прежде чем остановиться на том, как должен работать графический интерфейс, но если вы действительно хотите использовать идею корзины, вы должны сделать что-то вроде этого:
Шаг 1, создайте сегменты:
- Выберите желаемый размер сегмента (например, 40).
- Сортировка имен.
- Сделайте первые 40 имен первым ведром,
41-80 называет второе ведро и т. д., пока вы не создадите все ведра.
Шаг 2, определить «имена» сегментов («Adf-B» и т. Д.):
- Позволяет использовать ведро [i] .Left для ссылки на левую часть имени i-го ведра («Adf» выше) и на ведро [i]. Справа («B»)
- Позволяет использовать корзину [i] .Names для ссылки на список из 40 имен в этой корзине
- Теперь, предполагая, что у нас есть функция, которая может определить, сколько символов мы должны использовать для различения двух строк (давайте назовем это CharsNeeded), мы можем сравнить конец / начало сегментов рядом друг с другом и извлечь имена из того, что .
Как это:
bucket[i].Left = bucket[i].Names.First().Substring(0, CharsNeeded(bucket[i].Names.First(), bucket[i-1].Names.Last()));
bucket[i].Right = bucket[i].Names.Last().Substring(0, CharsNeeded(bucket[i].Names.Last(), bucket[i+1].Names.First()));
CharsNeeded может быть реализовано следующим образом:
int CharsNeeded(string str1, string str2)
{
int i=0;
while (i < str1.Length && i < str2.Length && str1[i] == str2[i])
i++;
return i + 1;
}
Кроме того, позаботьтесь о крайних случаях, так как я не проверял индекс вне границ массива сегментов.