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

时间:2014-12-29 23:06:02

标签: c# winforms list

我生成随机数的功能是:

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

基本上,每个数字要在列表中再添加一次。我怎样才能做到这一点? (如果考虑到时间不是问题,可以采用一种简单的方法来做这件事,也许是一种节省时间的更好方法)

由于

4 个答案:

答案 0 :(得分:3)

你的问题不清楚。

您可以使用重复元素的列表(不是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));

答案 1 :(得分: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;
    }

答案 2 :(得分:1)

我想你只想要这样的东西:

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

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

答案 3 :(得分:1)

我认为你需要改变你的功能如下:

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;
}

我尝试了上面的功能,就像你说的一样。