You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从列表中随机选取带数字后缀的新生成字符串并写入Excel

问题分析与解决方案

原代码核心问题

  • 循环逻辑混乱:GeneratePassword方法中,选中初始单词索引后执行names.RemoveAt(index),直接删除了原始单词,后续循环的names[index]指向的是新添加的带数字字符串,导致生成的组合完全偏离预期。
  • 无复用机制:每次调用方法都会重新初始化原始单词列表并重复生成组合,既低效又容易引发索引越界问题,最终返回的names[index]并非正确的带数字密码。

修正后的实现代码

1. 重构密码生成类

将所有密码组合一次性生成并缓存,避免重复计算:

public class Program
{
    private readonly Random _random = new Random();
    private readonly List<string> _allPasswordCombinations;

    public Program()
    {
        // 原始单词列表
        var baseWords = new List<string> 
        { 
            "Ananas","Auto","Affe","Ameise","Apfel",
            "Biene","Baum","Birne","Ball","Blume",
            "Cello","Chips"
        };
        _allPasswordCombinations = new List<string>();

        // 生成所有单词+1-48的组合
        foreach (var word in baseWords)
        {
            for (int num = 1; num <= 48; num++)
            {
                _allPasswordCombinations.Add($"{word}{num}");
            }
        }
    }

    public string GeneratePassword()
    {
        // 从缓存的组合中随机选取一个
        int randomIndex = _random.Next(_allPasswordCombinations.Count);
        return _allPasswordCombinations[randomIndex];
    }
}

2. 调用代码(保持原有逻辑)

Program pwGenerator = new Program();
var loginIds = new List<string> { "Z00001", "Z00002", "Z00003" };
ws.Cells["B1"].LoadFromArrays(new List<string[]>(new[] { loginIds.ToArray() }));

// 随机生成3个密码
var passwords = new List<string> 
{ 
    pwGenerator.GeneratePassword(), 
    pwGenerator.GeneratePassword(), 
    pwGenerator.GeneratePassword() 
};
ws.Cells["B2"].LoadFromArrays(new List<string[]>(new[] { passwords.ToArray() }));

可选优化:生成不重复的随机密码

如果需要确保选中的3个密码不重复,可修改GeneratePassword方法:

public string GeneratePassword()
{
    if (_allPasswordCombinations.Count == 0)
        throw new InvalidOperationException("无可用密码组合");

    int randomIndex = _random.Next(_allPasswordCombinations.Count);
    var selectedPassword = _allPasswordCombinations[randomIndex];
    _allPasswordCombinations.RemoveAt(randomIndex);
    return selectedPassword;
}

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:57:14