c# List<string> 随机选取50个元素
时间: 2023-12-03 07:03:11 浏览: 90
可以使用C#中的Random类和List的Count属性来实现。具体代码如下:
```csharp
List<string> list = new List<string>(); // 假设这里已经有了字符串列表
Random rand = new Random();
List<string> randomList = new List<string>();
int count = 50; // 随机选取的元素个数
while (randomList.Count < count && list.Count > 0)
{
int index = rand.Next(list.Count);
randomList.Add(list[index]);
list.RemoveAt(index);
}
// randomList 中就是随机选取的50个元素
```
这段代码先创建了一个空的字符串列表`randomList`,然后使用`Random`类生成随机数,从原列表`list`中随机取出一个元素,添加到`randomList`中,并从`list`中删除该元素。重复此操作直到`randomList`中有50个元素或者`list`中没有元素为止。最后,`randomList`就是随机选取的50个元素。
相关问题
用c#制作一个抽奖程序
在C#中创建一个简单的抽奖程序,可以分为以下几个步骤:
1. **项目设置**:
- 打开Visual Studio或者VS Code等C#集成开发环境(IDE)。
- 创建一个新的控制台应用程序(Console App)。
2. **设计抽奖类**:
- 定义一个`Prize`类,包含奖项名称和剩余奖品数属性。
```csharp
public class Prize
{
public string Name { get; set; }
public int Remaining { get; set; }
}
```
3. **随机选择获奖者**:
- 使用`Random`类从参与者列表中随机选取一个赢家。
```csharp
Random random = new Random();
int winnerIndex = random.Next(participants.Count);
```
其中`participants`是一个List<string>,存储所有参与者的ID。
4. **抽取奖品**:
- 如果还有奖品,就从`Prize`类中减少一个。
```csharp
if (prizes[winnerIndex].Remaining > 0)
{
prizes[winnerIndex].Remaining--;
Console.WriteLine($"恭喜编号{winnerIndex}的参与者获得:{prizes[winnerIndex].Name}");
}
```
5. **主函数和用户交互**:
- 主函数中初始化奖品、参与者,并运行抽奖过程。
```csharp
static void Main(string[] args)
{
List<Prize> prizes = new List<Prize>() { /* 初始化奖品列表 */ };
List<string> participants = GetParticipants(); // 获取参与者列表
while (/* 条件判断继续抽奖 */)
{
// 抽奖逻辑
}
Console.ReadLine(); // 等待用户按下Enter键退出
}
private static List<string> GetParticipants()
{
// 获取并返回参与者列表
}
```
6. **添加用户输入和循环**:
- 可能需要让用户不断参与抽奖,直到达到预设次数或无更多奖品。
7. **错误处理**:
- 考虑边界条件和异常处理,比如当参与者列表为空时如何处理。
完成以上步骤后,你就有了一个基础的C#抽奖程序。你可以根据需求增加更复杂的逻辑,例如保存历史记录、限制抽奖次数等。
c#中从m个数中随机取出n个不重复的数
在 C# 中,为了从给定的一组 m 个数中随机选取 n 个不重复的数,你可以使用 `System.Linq` 的 `OrderByNew()` 或者 `Zip()` 函数结合 `Random` 类,这里提供一种基于排序的方法:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static List<int> SelectUnique(int[] numbers, int n)
{
if (numbers.Length < n)
throw new ArgumentException("Not enough numbers to select without repetition.");
// 使用 Fisher-Yates 洗牌算法生成随机排列
Random random = new Random();
for (int i = numbers.Length - 1; i >= n; i--)
{
int j = random.Next(i + 1);
Swap(ref numbers[i], ref numbers[j]);
}
// 取前 n 个元素作为结果
return numbers.Take(n).ToList();
}
private static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
public static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 例如这里有 m 个数字
int n = 3; // 需要取 n 个不重复的数
var selectedNumbers = SelectUnique(numbers, n);
Console.WriteLine("Selected unique numbers: " + string.Join(", ", selectedNumbers));
}
}
```
这个程序首先检查是否有可能选到不重复的 n 个数,然后对数组进行随机排序,最后取前 n 个元素。运行 `Main` 函数会显示随机选取的不重复的 n 个数。
阅读全文