控制随机值

时间:2015-09-01 10:24:59

标签: c# list random

我使用随机浏览列表我喜欢这样:

var oServer = new SmtpServer("");
var random = new Random();
var randomIndex = random.Next(list.Count());
var socks = list[randomIndex];

oServer.SocksProxyServer = socks.IpAddress.ToString();
oServer.SocksProxyPort = socks.Port;

我希望如果选择了值,则下次不再选择。我希望它选择另一个值。

我应该做什么?

3 个答案:

答案 0 :(得分:2)

如果您无法从list移除,请从possibleIndexes移除

private static random = new Random();

...
List<int> possibleIndexes = Enumerable
  .Range(0, list.Count())
  .ToList();

...

int idx = random.Next(possibleIndexes.Count());
int index = possibleIndexes[idx];
possibleIndexes.RemoveAt(idx);
var socks = list[index];
...

答案 1 :(得分:1)

如果您不想再次使用该项目,请从列表中删除该项目:

var socks = list[randomIndex];
list.RemoveAt(randomIndex);

答案 2 :(得分:0)

如果您不想丢失原始列表中的数据,请先将列表复制到另一个列表,然后从您的副本列表中删除项目

        var copyList=new List<yourListType>();
        copyList.AddRange(list);//copy form your orginal list
        var socks = copyList[randomIndex];
        copyList.RemoveAt(randomIndex);

或者您可以生成唯一的随机数

     List<int> randomNumbers = new List<int>(list.Count());

        do
        {
            randomIndex = random.Next();
        } while (randomNumbers.Contains(randomIndex));

        randomNumbers.Add(randomIndex);
        var socks = list[randomIndex];