Вот самая быстрая функция!
Почему это быстрее?
String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};
Ниже представлена более медленная и более читаемая версия:
String.prototype.timesCharExist = function ( chr ) {
var total = 0, last_location = 0, single_char = ( chr + '' )[0];
while( last_location = this.indexOf( single_char, last_location ) + 1 )
{
total = total + 1;
}
return total;
};
Это медленнее из-за счетчика, длинных имен переменных и неправильного использования 1 var.
Чтобы использовать его, вы просто это делаете:
'The char "a" only shows up twice'.timesCharExist('a');
Редактировать: (2013/12/16)
НЕ использовать с Opera 12.16 или старшая! это будет почти в 2,5 раза больше, чем регулярное выражение!
На хром это решение займет от 14 мс до 20 мс для 1 000 000 символов.
Решение регулярного выражения занимает 11-14 мс для такое же количество.
Использование функции (вне String.prototype
) займет около 10-13 мс.
Вот код:
String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};
var x=Array(100001).join('1234567890');
console.time('proto');x.timesCharExist('1');console.timeEnd('proto');
console.time('regex');x.match(/1/g).length;console.timeEnd('regex');
var timesCharExist=function(x,c){var t=0,l=0,c=(c+'')[0];while(l=x.indexOf(c,l)+1)++t;return t;};
console.time('func');timesCharExist(x,'1');console.timeEnd('func');
результат всех решений должен быть 100 000!
Примечание: если вы хотите, чтобы эта функция подсчитывала более 1 символа, измените, где c=(c+'')[0]
, на c=c+''
Для меня это похоже на вопрос о макете.
В winforms у вас есть свойство AutoSize
и TableLayoutPanel
/ FlowLayoutPanel
, чтобы легко создавать динамические макеты.
Руководство:
TableLayoutPanel
(2 столбца, 2 строки, установить каждый в Auto
после добавления содержимого), установите [d3], CheckedListBox
es), установите Visibility = False
на изначально скрытые, AutoSize = True
и AutoSizeMode = GrowAndShrink
в форму и TableLayoutPanel
; CheckedChanged
изменение события Visibility
, а остальное происходит автоматически. Добавьте свой контроль в панель и прикрепите / привяжите панель, а затем попытайтесь изменить размер.