максимально равномерно распределять типы элементов в массиве
Количество предметов каждого типа разное. Предположим, у меня есть пункты "a", "b" и "c". есть массив этих элементов ['a','b','b','c','c','c','a','c'], например, и я хочу переместить элементы в массив, чтобы их всех посещали как можно чаще, пропорционально их количеству.
Есть идеи, как я это делаю. Я хочу, чтобы я мог взять коэффициент обработки нагрузки для своих серверов и просто создать массив идентификаторов хоста, чтобы я распределял нагрузку как можно более равномерно, не отправляя 5 клиентов на один сервер подряд, а затем 3 клиента на другой подряд. Если вы понимаете, о чем я.
1 ответ
Если вы хотите сделать балансировщик нагрузки, вы можете использовать linq, чтобы получить поиск и получить счетчик для текущей нагрузки, а затем назначить новому клиенту наименьшее количество.
общедоступный статический int minLoad (средний список) { var count = avg.ToLookup(x => x).Select(x => new { item = x.Key, Counter = x.Count() }); var minclient = count.OrderByDescending(x => x.Counter).First().item; вернуть minclient; } общедоступная статическая строка minLoadstr(List avg) { var count = avg.ToLookup(x => x).Select(x => new { item = x.Key, Counter = x.Count() }); var minclient = count.OrderByDescending(x => x.Counter).First().item; вернуть minclient; } public static void Main(string[] args) { List clientsload = new List { 1, 1, 2, 2, 3, 3 }; int minclient = minLoad(загрузка клиентов); Список clientsloadstr = new List { "A","A","C","B","C","C" }; строка minclientstr = minLoadstr(clientsloadstr); }