C# 从两个列表中随机选择一个项目

C# 从两个列表中随机选择一个项目,c#,visual-studio,C#,Visual Studio,我正在从一个或另一个列表中生成随机项。我有点挣扎如何做到这一点 基本上我有两个清单: List<string> names = new List<string>(); List<string> surnames = new List<string>(); 列表名称=新列表(); 列表姓氏=新列表(); 我知道如何从一个列表中随机获得一个项目,但我正在努力做到这一点,因为有可能从名字或姓氏中获得一个项目 我知道可能有一个简单的解决办法,但找不到

我正在从一个或另一个列表中生成随机项。我有点挣扎如何做到这一点

基本上我有两个清单:

List<string> names = new List<string>();
List<string> surnames = new List<string>();
列表名称=新列表();
列表姓氏=新列表();
我知道如何从一个列表中随机获得一个项目,但我正在努力做到这一点,因为有可能从名字或姓氏中获得一个项目

我知道可能有一个简单的解决办法,但找不到


任何帮助都将不胜感激。

您可以合并两个列表并访问随机元素,如下所示:

var newList = names.Concat(surnames).ToList();
Random r = new Random();
string rand = newList[r.Next(newList.Count)];
我知道如何从一个列表中随机获取一个项目

利用从单个列表中获取随机项的技术,构建一种处理两个列表的简单方法

  • 假设您有一个长度
    N=names.Count+names.Count的列表
  • 在0(含)和
    N(不含)之间选择一个随机位置
    p
  • 如果位置
    p
    小于
    names.Count
    ,请使用
    names[p]
  • 否则,请使用
    姓氏[p-names.Length]
实际上,上述方法从合并列表中拾取一个项,而不执行实际的合并


编辑:结果表明,您想要的是
姓名[]
姓氏[]
的随机组合。这是一个更简单的任务,通过两次从数组中随机选取一个元素来实现,一次从
名称[]
,然后分别从
姓氏[]

中选取。这应该可以完成以下任务:

Random r = new Random();
Int32 nameIdx = r.Next(names.Count);
Int32 surnameIdx = r.Next(surnames.Count);

String randFullname = names[nameIdx] + " " + surnames[surnameIdx];
这只是一个演示如何使用随机数组访问的示例。如果您只需要选择一个姓名或一个姓氏(这一点上的问题并不十分清楚,“但我正在努力解决如何从姓名或姓氏中提取项目的问题”),只需抛出另一个随机[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当前列表;
字符串结果;
随机r=新随机();
if(rand.Next(0,2)==0)
currentList=名称;
其他的
currentList=姓氏;
Int32 idx=r.Next(currentList.Count);
字符串结果=当前列表[idx];
否则,只需从串联中选取一个随机项:

List<String> con = names.Concat(surnames).ToList();
List con=names.Concat(姓氏).ToList();

如果您想在一行程序中完成,可以尝试以下操作:

var r = new Random();
var randomName = names.Concat(surnames).OrderBy(n => r.Next()).First();

它在内存方面不是很有效,但应该可以工作。

我知道如何从一个列表中随机获取一个项目,因此您可以显示该项目的相关代码吗?如果有4个名称和8个姓氏,那么在该上下文中,“随机”是什么意思?例如,这是否意味着66%的时间你会选择姓氏,33%的时间你会选择名字?不,名字和姓氏的数量总是相同的,所以如果有4个名字,那么也会有4个姓氏。你希望有50/50的机会得到一个名字或姓氏,或者你想让机会与每一类名字的数量相对吗?我的意思是,如果你的姓氏数量是你的10倍,你是想有10倍的机会来画一个姓氏,还是你仍然想要50/50的名字/姓氏?另外,考虑到你的知识,如果你把这些列表塞进一个新的列表……编辑我的答案。没关系,第一次尝试是错误的,但现在这应该完全符合OP的要求!谢谢,对不起,我没有把问题说清楚,但这正是我想要的。