Я новичок в языке программирования D, только что начал читать книгу "Язык программирования D".
Я сталкиваюсь с ошибкой при попытке использовать пример кода ассоциативного массива
#!/usr/bin/rdmd
import std.stdio, std.string;
void main() {
uint[string] dict;
foreach (line; stdin.byLine()) {
foreach (word; splitter(strip(line))) {
if (word in dict) continue;
auto newId = dict.length;
dict[word] = newId;
writeln(newId, '\t', word);
}
}
}
DMD показывает это сообщение об ошибке:
./vocab.d(11): Ошибка: ассоциативным массивам могут быть назначены только значения с неизменяемыми клавишами, а не char []
Я использую компиляцию DMD 2.051
Я предполагал, что правила для ассоциативных массивов изменились со времен книги TDPL.
Как использовать ассоциативные массивы со строковыми клавишами?
Спасибо.
Update:
Я нашел решение в последующих частях книги.
используйте string.idup, чтобы сделать дублирующее неизменяемое значение перед помещением в массив.
так
dict[word.idup] = newId;
выполнит эту работу.
Но эффективен?