我生成随机数的功能是:
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
基本上,每个数字要在列表中再添加一次。我怎样才能做到这一点? (如果考虑到时间不是问题,可以采用一种简单的方法来做这件事,也许是一种节省时间的更好方法)
由于
答案 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;
}
我尝试了上面的功能,就像你说的一样。