那麼,我需要在(1,8)範圍內生成2個數字。 假設,前兩個數字是3 & 4.第二次範圍將排除3 & 4,這就是我想要完成的。這樣循環將繼續4次。需要在給定範圍內生成一對數字C#
我一直在努力...但不能進行
我所知道的是使用Random
類
範圍是固定的
任何類型的幫助下將提前accepted.Thanks
那麼,我需要在(1,8)範圍內生成2個數字。 假設,前兩個數字是3 & 4.第二次範圍將排除3 & 4,這就是我想要完成的。這樣循環將繼續4次。需要在給定範圍內生成一對數字C#
我一直在努力...但不能進行
我所知道的是使用Random
類
範圍是固定的
任何類型的幫助下將提前accepted.Thanks
方法1(古典):
static List<Tuple<int, int>> GetPairs(int min, int max, Random r)
{
var items = new List<Tuple<int, int>>();
var pickedItems = new HashSet<int>();
int count = (max - min + 1);
Func<int> randAndCheck =() =>
{
int? candidate = null;
while(candidate == null || pickedItems.Contains(candidate.Value))
candidate = r.Next(min, max + 1);
pickedItems.Add(candidate.Value);
return candidate.Value;
};
while (pickedItems.Count != count)
{
int firstItem = randAndCheck();
int secondItem = randAndCheck();
items.Add(Tuple.Create(firstItem, secondItem));
}
return items;
}
用法:
static void Main(string[] args)
{
foreach(var pair in GetPairs(1, 8, new Random()))
{
Console.WriteLine($"One: {pair.Item1} Two: {pair.Item2}");
}
}
輸出:
One: 4 Two: 2
One: 8 Two: 3
One: 5 Two: 1
One: 7 Two: 6
方法2與某種方式隨機排序和執行遞延:
static IEnumerable<Tuple<int, int>> TwoAtATime(int min, int max, Random r)
{
var enumerator = Enumerable.Range(min, max - min + 1)
.OrderBy(x=> r.Next()).GetEnumerator();
while(enumerator.MoveNext())
{
int item1 = enumerator.Current;
if (enumerator.MoveNext())
{
int item2 = enumerator.Current;
yield return Tuple.Create(item1, item2);
}
}
}
用法:
static void Main(string[] args)
{
foreach(var pair in TwoAtATime(1, 8, new Random()))
{
Console.WriteLine($"One: {pair.Item1} Two: {pair.Item2}");
}
}
輸出:
One: 2 Two: 5
One: 4 Two: 7
One: 1 Two: 6
One: 8 Two: 3
http://stackoverflow.com/questions/4299138/generate-n-random-and-獨特數字範圍內/ 18055921#18055921 這服務我的目的@ user3185569 – ispostback
下面的代碼:
using System.Collections.Generic;
namespace TestApp
{
class Program
{
static readonly Random rand =
new Random(DateTime.Now.Millisecond);
static void Main(string[] args)
{
var pickList = new List<int> {1, 2, 3, 4, 5, 6, 7, 8};
while (pickList.Count > 1)
{
Console.WriteLine(
"Hit any key to get Random pair of integers from List.");
Console.ReadLine();
var pair = GetPairFromList(pickList);
Console.WriteLine($"Pair is: {pair.Item1}: {pair.Item2}");
}
Console.WriteLine("List is empty; Hit any key to exit.");
Console.ReadLine();
}
private static Tuple<int, int> GetPairFromList(IList<int> picks)
{
return new Tuple<int, int>(
GetIntFromList(picks),
GetIntFromList(picks));
}
private static int GetIntFromList(IList<int> picks)
{
// next line is where random picking happens
var val = picks[(int)(picks.Count*rand.NextDouble())];
// remove randomly selected item from list
picks.Remove(val);
return val;
}
}
}
http://stackoverflow.com/questions/4299138/generate-n-random-and-unique-numbers-within-a-範圍/ 18055921#18055921 這服務我的目的 Th @ks @Charles Bretana – ispostback
然後,你可以將它標記爲接受答案? –
可能重複:http://stackoverflow.com/q/4299138/121309 –
使用隨機從列表中選擇,並在第二次選擇之前刪除從列表中選取的項目。看看https://www.ma.utexas.edu/users/parker/sampling/repl.htm –
假設3和4只是例子,'Enumerable.Range(1,8)',洗牌,把它們放進一個堆棧,並彈出它們,因爲你需要它們 – Plutonix