如何在现有列表中添加相同的数字

本文关键字:添加 数字 列表 | 更新日期: 2023-09-27 18:35:40

我生成随机数的函数是这样的:

public static List<int> GetRandomNumbers(int count)
{
    HashSet<int> randomNumbers = new HashSet<int>();
    Random random = new Random();
    for (int i = 0; i < count; i++)
    {
        while(!randomNumbers.Add(random.Next(100, 999)));
    }
    return randomNumbers.ToList();
}

我是这样称呼它的:

private void button1_Click(object sender, EventArgs e)
{
    List<int> list = new List<int>();
    list = GetRandomNumbers(5);
    for (int i = 0; i < list.Count; i++)
    {
        MessageBox.Show(list[i].ToString());
    }
}

好的,所以,我想做的是,例如,如果生成的列表如下:

152 582 254 891 421

我想使列表成为:

152 152 582 582 254 254 891 891 421 421

基本上,每个数字都要在列表中自己之后再添加一次。我该怎么做?(考虑到时间不是问题,如果您包括一种简单的方法来做到这一点,那就太好了,也许是节省时间的更好方法)

谢谢

如何在现有列表中添加相同的数字

你的问题不清楚。

您可以获取一个包含重复元素的列表(不是HashSet),并将每个重复项移动到紧跟在第一次出现之后,如下所示:

var numbers = Enumerable.Range(1, count).Select(i => random.NextInt(0, 300));
return numbers.GroupBy(i => i).SelectMany(s => s).ToList();

您可以采用现有列表并使每个元素重复两次,如下所示:

list.SelectMany(o => Enumerable.Repeat(o, 2));

您可以将函数稍微更改为:

    private static Random random = new Random();
    public static List<int> GetRandomNumbers(int count)
    {
        int value;
        List<int> values = new List<int>();
        HashSet<int> randomNumbers = new HashSet<int>();
        for (int i = 0; i < count; i++)
        {
            while (!randomNumbers.Add(value = random.Next(100, 999)));
            values.Add(value);
            values.Add(value);
        }
        return values;
    }

我认为你只是想要这样的东西:

var list2 = new List<int>(list1.Count * 2);
foreach (var n in list1)
{
    list2.Add(n);
    list2.Add(n);
}

这将遍历列表并将每个值放入第二个列表中两次。

我认为您需要按如下方式更改函数:

public static List<int> GetRandomNumbers(int count)
{
    List<int> Result = new List<int>();
    Random random = new Random();
    for (int i = 0; i < count; i++)
    {
        int NewNumber = random.Next(100, 999);
        Result.Add(NewNumber);
        Result.Add(NewNumber);
    }
    return Result;
}

我尝试了上面的功能,它就像你说的那样工作。