![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение индекса по строке в массиве. [D7, Win95/98]
мозг_умер © (2004-06-21 21:20:00)Здравствуйте, Мастера. Есть такая конструкция:
type
TSomeType = (stOne, stTwo, stThree, stFour);
const
SomeTypeStrings: array[TSomeType] of string = ('One', 'Two',
'Three', 'Four');
Как по строковому значению из SomeTypeStrings получить индекс в TSomeType. Например, 'Three' должен возвратить 2. Заранее благодарен.
P.S: Возможно есть некие неточности в терминологии - не судите строго, у меня проблемы с запоминанием терминов.
мозг_умер (2004-06-21 22:59:00) [1];))
Ага, а если так:
type
TSomeType = (stOne, stTwo, stThree, stFour);
const
SomeTypeStrings: array[TSomeType] of string = ('Oh My God - This One', 'Oh My God - This Two', 'Oh My God - This Three', 'Oh My God - This Four');
?
Igorek (2004-06-21 22:43:00) [2]
> if GetEnumName(TypeInfo(TSomeType), I) = 'st' + stName then
мозг_умер (2004-06-21 22:29:00) [3]Сделал так:
function GetSomeTypeIndex(const stName: string): Integer;
var
I: Integer;
begin
Result := 0;
for I := Ord(Low(TSomeType)) to Ord(High(TSomeType)) do
if GetEnumName(TypeInfo(TSomeType), I) = stName then
begin
Result := I;
Break;
end;
end;
Строка выделенная жирным неверна, так как идет сравнение между строковым значением из массива SomeTypeStrings и значением из TSomeType. Равны они, естесственно, не будут. Отсюда вывод: надо сопоставить строковое значение и значение из TSomeType. А вот как? Извините, мозг_совсем_умер.
Igorek (2004-06-21 21:52:00) [4]TypInfo.GetEnumName - тогда порядок в наборе и массиве может не совпадать
Johnmen (2004-06-21 21:24:00) [5]Перебор. А ты что думал ?
:)