C # Изменение размера оригинальной формы?

Вот самая быстрая функция!

Почему это быстрее?

  • Не проверяет char по char (с одним исключением)
  • Использует некоторое время и увеличивает 1 var (показатель char var) по сравнению с циклом for, проверяющим длину и увеличивая 2 vars (обычно var i и var с номером char)
  • Использует WAY less vars
  • Не использует regex!
  • Использует (надеюсь) высоко оптимизированную функцию
  • Все операции объединены, как они могут быть, избегая замедление из-за нескольких операций
    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+''

1
задан Sinatr 13 July 2018 в 09:48
поделиться

2 ответа

Для меня это похоже на вопрос о макете.

В winforms у вас есть свойство AutoSize и TableLayoutPanel / FlowLayoutPanel, чтобы легко создавать динамические макеты.


Руководство:

  • добавить TableLayoutPanel (2 столбца, 2 строки, установить каждый в Auto после добавления содержимого), установите [d3],
  • добавьте содержимое (CheckedListBox es), установите Visibility = False на изначально скрытые,
  • установите AutoSize = True и AutoSizeMode = GrowAndShrink в форму и TableLayoutPanel ;
  • в флажке CheckedChanged изменение события Visibility, а остальное происходит автоматически.
0
ответ дан Sinatr 17 August 2018 в 13:15
поделиться

Добавьте свой контроль в панель и прикрепите / привяжите панель, а затем попытайтесь изменить размер.

0
ответ дан sathish 17 August 2018 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: