c#数组中随机抽取不重复的几个元素。

名称名称 2017-04-07 01:17:37
private void test()
{
string[] arr = new string[4] { "啊", "饿", "一", "他" };
Random ra = new Random();
int num = 4;//arr长度
int chooes = ra.Next(num);
MessageBox.Show(arr[chooes].ToString());
}

private void button1_Click(object sender, EventArgs e)
{
test();
}
这样我只能抽取一个 我怎么才能取出不重复的3个。
...全文
2784 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
五维思考 2019-07-24
  • 打赏
  • 举报
回复
2楼得5分
8楼得10分

这样分配,楼主真是没看明白啊
boyueshaoxiao 2017-08-17
  • 打赏
  • 举报
回复
不先动手尝试就在那妄加揣测,可不是好习惯
名称名称 2017-04-07
  • 打赏
  • 举报
回复
引用 2 楼 diaodiaop 的回复:

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
也是随机的,可是初学者看不懂,谢谢7楼和2楼
吴太乙 2017-04-07
  • 打赏
  • 举报
回复
Enumerable.Range(1,100).OrderBy(s=>Guid.NewGuid()).Take(10)
crystal_lz 2017-04-07
  • 打赏
  • 举报
回复
随机打乱 再按照顺序取不就好了 参照洗牌算法。。
wx262914 2017-04-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_25095899 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote]
引用 4 楼 wddw1986 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote] 为什么不是随机的?理由是什么?[/quote] 永远都是数组里的头三个。[/quote] 为什么永远是头三个?意思每次new 的guid 都一样的?
xuzuning 2017-04-07
  • 打赏
  • 举报
回复
您不能动手测试一下吗?
引用 5 楼 qq_25095899 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote]
引用 4 楼 wddw1986 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote] 为什么不是随机的?理由是什么?[/quote] 永远都是数组里的头三个。[/quote]
cheng2005 2017-04-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_25095899 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote]
引用 4 楼 wddw1986 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote] 为什么不是随机的?理由是什么?[/quote] 永远都是数组里的头三个。[/quote] 为什么永远是头三个?你跑10次试了?
qq_26840229 2017-04-07
  • 打赏
  • 举报
回复
引用 2 楼 diaodiaop 的回复:

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
不明觉厉,表示看不懂
大然然 2017-04-07
  • 打赏
  • 举报
回复
angel6709 2017-04-07
  • 打赏
  • 举报
回复
方法很多,随机交换,随机排序,随机取后删除。。
大然然 2017-04-07
  • 打赏
  • 举报
回复
引用 3 楼 qq_34266409 的回复:
[quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote]
引用 4 楼 wddw1986 的回复:
[quote=引用 3 楼 qq_34266409 的回复:] [quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote] 为什么不是随机的?理由是什么?[/quote] 永远都是数组里的头三个。
cheng2005 2017-04-07
  • 打赏
  • 举报
回复
引用 3 楼 qq_34266409 的回复:
[quote=引用 2 楼 diaodiaop 的回复:]

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的[/quote] 为什么不是随机的?理由是什么?
Mooyi_水 2017-04-07
  • 打赏
  • 举报
回复
引用 2 楼 diaodiaop 的回复:

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
这个应该不是随机的
by_封爱 版主 2017-04-07
  • 打赏
  • 举报
回复

var rs = string.Join("-", arr.OrderBy(d => Guid.NewGuid()).Take(3));
MessageBox.Show(rs);
xdashewan 2017-04-07
  • 打赏
  • 举报
回复
一种方法:选中的数从集合中移除,然后产生一个不大于现在集合总数的新的随机数 第二种方法:在生成源数据的时候,加一个字段,并把产生的随机数放入那个字段(重复也无所谓),然后按随机数对源数据进行排序,最后依次取排序后的数据即可 第二种方法在数据库sql使用更为方便

111,083

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧