Если бы Вы пытаетесь использовать универсальный Словарь в C# как Вы, использовал бы ассоциативный массив на другом языке:
foreach(var item in myDictionary)
{
foo(item.Key);
bar(item.Value);
}
Или, если только необходимо выполнить итерации по набору ключей, использование
foreach(var item in myDictionary.Keys)
{
foo(item);
}
И наконец, если Вы только интересуетесь значениями:
foreach(var item in myDictionary.Values)
{
foo(item);
}
(Обращают внимание, что var
ключевое слово является дополнительным C# 3.0 и выше функции, Вы могли также использовать точный тип своих ключей/значений здесь)
Я думаю, что вы можете использовать функции из вопроса по немного другой теме ( Эффективно заменить все символы с диакритическими знаками в строке? ).
В ответе Джейсона Бантинга есть несколько хороших идей + необходимое объяснение, вот его решение с некоторыми модификациями, чтобы вы начали ( если вы сочтете это полезным, также проголосуйте за его исходный ответ, так как это его код, по сути ).
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
},
translator = function($0, $1) {
return translate[$1];
};
return function(s) {
return s.replace(translate_re, translator);
};
})();
вызывается как
var stringToMatch = "This string has special chars & and &nbsp;";
var stringOutput = replaceHtmlEntites(stringToMatch);
Нумерованные объекты еще проще, вы можете заменить их в более общем виде, используя небольшую математику и String.fromCharCode ()
.
Другой, гораздо более простой вариант - это (работает в любом браузере)
function replaceHtmlEntites(string) {
var div = document.createElement("div");
div.innerHTML = string;
return div.textContent || div.innerText;
}
replaceHtmlEntites("This string has special chars < & >");
// -> "This string has special chars < & >"
Другой способ - создать объект div
var tmp = document.createElement("div");
Затем присвоить текст его внутреннему HTML
tmp.innerHTML = mySpecialString;
И, наконец, чтение текстового содержимого элемента
var output = tmp.textContent || tmp.innerText //for IE compatibility
И вот ...
Вы можете использовать замену на основе функций, чтобы делать то, что вы хотите:
var myString = '&'+'nbsp;&'+'nbsp;&tab;©';
myString.replace(/&\w+?;/g, function( e ) {
switch(e) {
case ' ':
return ' ';
case '&tab;':
return '\t';
case '©':
return String.fromCharCode(169);
default:
return e;
}
});
Однако я настоятельно призываю вас рассмотреть вашу ситуацию. Если вы получаете & nbsp; и & копировать; и другие объекты HTML в текстовых значениях, вы действительно хотите их заменить? Стоит ли конвертировать их потом?
Просто запомните.
Ура!