模拟实体类:
class Server
{
public String Ip_Port { get; set; }
public int weightip { get; set; }
public override string ToString()
{
Console.WriteLine($"Ip_Port={Ip_Port},weightip={weightip}");
return base.ToString();
}
}
模拟数据源:
List<Server> servers = new List<Server>
{
new Server
{
Ip_Port="asdas:1223",
weightip=2
},
new Server
{
Ip_Port="tegwer:154782",
weightip=1
},
new Server
{
Ip_Port="kjhvd:41201",
weightip=3
},
new Server
{
Ip_Port="errtqwe:412177",
weightip=9
},
new Server
{
Ip_Port="hjyhdf:7878",
weightip=7
}
};
主要代码:
int sum = 0;
var rand = new Random();
int num = rand.Next(1, servers.Select(t => t.weightip).Sum());
foreach (var item in servers)
{
sum += item.weightip;
if (num > sum)
continue;
Console.WriteLine(item.ToString());
break;
}
10次模拟结果:
int n = 0;
var rand = new Random();
while (n++<10)
{
int sum = 0;
int num = rand.Next(1, servers.Select(t => t.weightip).Sum());
foreach (var item in servers)
{
sum += item.weightip;
if (num > sum)
continue;
Console.WriteLine(item.ToString());
break;
}
}

这段代码定义了一个Server类,包含IP端口和权重属性,并实现了ToString方法。然后创建了一个Server对象的列表,每个对象都有不同的IP端口和权重。主要代码部分通过随机数选择一个权重总和小于或等于随机数的服务器进行输出。进行了10次这样的模拟选择。
331

被折叠的 条评论
为什么被折叠?



