代碼很簡單,但算法很經典,話不多說,直接上代碼。
public struct ServerConfig
{
/// <summary>
/// 初始權重
/// </summary>
public int Weight { get; set; }
/// <summary>
/// 當前權重
/// </summary>
public int Current { get; set; }
/// <summary>
/// 服務名稱
/// </summary>
public string Name { get; set; }
}
public static int NextServerIndex(ServerConfig[] ss)
{
int index = -1;
int total = 0;
int size = ss.Count();
for (int i = 0; i < size; i++)
{
ss[i].Current += ss[i].Weight;
total += ss[i].Weight;
if (index == -1 || ss[index].Current < ss[i].Current)
{
index = i;
}
}
ss[index].Current -= total;
return index;
}
static void Main(string[] args)
{
var sv = new ServerConfig[] {
new ServerConfig{ Name="A",Weight=4},
new ServerConfig{ Name="B",Weight=2},
new ServerConfig{ Name="C",Weight=1}
};
int index = 0;
int sum = sv.Sum(m => m.Weight);
for (int i = 0; i < sum; i++)
{
index = NextServerIndex(sv);
Console.WriteLine("{0} {1}", sv[index].Name, sv[index].Weight);
}
Console.Read();
}
參考文獻:http://blog.csdn.net/gqtcgq/article/details/52076997
文章出處:http://www.cnblogs.com/anech/p/6704240.html
轉載請注名出處,謝謝!
