распределять типы элементов в массиве как можно более равномерно - PullRequest
0 голосов
/ 06 ноября 2019

существует разное количество предметов каждого типа. Предположим, у меня есть предметы «a», «b» и «c». иметь массив этих элементов ['a', 'b', 'b', 'c', 'c', 'c', 'a', 'c'], например, и я хочу переместить элементы вмассив, чтобы их всех посещали как можно чаще пропорционально их количеству.

Есть идеи, как мне это сделать. Я хочу, чтобы я мог взять коэффициент обработки нагрузки для своих серверов и просто создать массив идентификаторов хостов, чтобы я распределил нагрузку как можно более равномерно, не отправляя 5 клиентов на один сервер подряд, а затем 3 клиента на другой подряд. Если вы понимаете, о чем я.

1 Ответ

0 голосов
/ 06 ноября 2019

Если вы хотите сделать балансировщик нагрузки, вы можете использовать linq, чтобы получить поиск и получить счет для текущей нагрузки, а затем назначить новому клиенту самое низкое значение.

public static int minLoad (Список 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;вернуть минклиент;} открытая статическая строка 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;вернуть минклиент;} public static void Main (string [] args) {List clientsload = new List {1, 1, 2, 2, 3, 3};int minclient = minLoad (clientload);List clientsloadstr = новый список {"A", "A", "C", "B", "C", "C"};строка minclientstr = minLoadstr (clientsloadstr);}

...