我正在处理从一个或另一个列表中生成随机项目。我有点挣扎如何做到这一点。
基本上我有两个清单:
List<string> names = new List<string>();
List<string> surnames = new List<string>();
我知道如何从一个列表中随机获取一个项目,但我正在努力如何这样做,有可能从名字或姓氏中取一个项目。
我知道可能有一个简单的解决方案,但无法找到它。
任何帮助都将不胜感激。
答案 0 :(得分:3)
我知道如何从一个列表中随机获取一个项目
利用该技术从单个列表中获取随机项,以构建一个适用于两个列表的简单方法。
N = names.Count + surnames.Count
p
之间的随机位置N
,排除p
小于names.Count
,请使用names[p]
surnames[p - names.Length]
实际上,上述方法从合并列表中选择项目而不执行实际合并。
修改:事实证明您想要names[]
和surnames[]
的随机组合。这是一个更简单的任务,可以通过从数组中选择一个随机元素两次来实现 - 一次从names[]
开始,然后再从surnames[]
开始。
答案 1 :(得分:2)
这应该做的工作:
Random r = new Random();
Int32 nameIdx = r.Next(names.Count);
Int32 surnameIdx = r.Next(surnames.Count);
String randFullname = names[nameIdx] + " " + surnames[surnameIdx];
这只是向您展示如何使用随机数组访问的示例。如果你只需要选择一个名字或一个姓氏(问题在那一点上并不是很清楚&#34;但我正在努力如何做到这一点,有可能从一个名字或姓氏中取一个项目& #34; ),只需抛出另一个随机[0 1]并根据输出值选择第一个或第二个列表:
List<String> currentList;
String result;
Random r = new Random();
if (rand.Next(0, 2) == 0)
currentList = names;
else
currentList = surnames;
Int32 idx = r.Next(currentList.Count);
String result = currentList[idx];
否则,只需从串联中选择一个随机条目:
List<String> con = names.Concat(surnames).ToList();
答案 2 :(得分:0)
您可以合并两个列表并访问随机元素,如下所示,
var newList = names.Concat(surnames).ToList();
Random r = new Random();
string rand = newList[r.Next(newList.Count)];
答案 3 :(得分:-1)
如果您想以单行方式进行,可以尝试以下方法:
var r = new Random();
var randomName = names.Concat(surnames).OrderBy(n => r.Next()).First();
这不是非常有效的记忆,但它应该有用。