我正在寫給你一個小問題。我在C#.NET MVC5中編寫小應用程序,我有一個問題,我如何從列表中獲得一些隨機項目?我如何從列表中獲得隨機數的元素
我的代碼:
public ActionResult ProductsList()
{
List<Product> products = productRepo.GetProduct().ToList();
return PartialView(products);
}
這個方法返回完整列表,我該怎麼做是正確的?
我正在寫給你一個小問題。我在C#.NET MVC5中編寫小應用程序,我有一個問題,我如何從列表中獲得一些隨機項目?我如何從列表中獲得隨機數的元素
我的代碼:
public ActionResult ProductsList()
{
List<Product> products = productRepo.GetProduct().ToList();
return PartialView(products);
}
這個方法返回完整列表,我該怎麼做是正確的?
根據生成的隨機數生成一個隨機數並獲取列表的6個元素。
public ActionResult ProductsList()
{
Random rnd = new Random();
List<Product> products = productRepo.GetProduct().ToList();
Random r = new Random();
int randomNo = r.Next(1, products.Count);
int itemsRequired = 6;
if (products.Count <= itemsRequired)
return PartialView(products));
else if (products.Count - randomNo >= itemsRequired)
products = products.Skip(randomNo).Take(itemsRequired).ToList();
else
products = products.Skip(products.Count - randomNo).Take(itemsRequired).ToList();
return PartialView(products));
我該如何做最小和最大數量的隨機元素?現在它給了我隨機數量的元素。我需要6個元素默認,總是。 – Giacomo
@Giacomo,我已經更新了我的答案,以便始終生成6個元素。 –
如果最初的產品列表有*值太少,該怎麼辦?例如。只有'itemsRequired = 6'時纔有'3'?在你當前的代碼中,一個* exception *將被拋出,當最好的出路,恕我直言,是返回整個列表。 –
在某處創建一個Random類的實例。請注意,每次需要隨機數字時,不要創建新實例非常重要。您應該重新使用舊實例來實現生成的數字的一致性。
static Random rnd = new Random();
List<Product> products = productRepo.GetProduct().ToList();
int r = rnd.Next(products.Count);
products = products.Take(r).ToList();
我很確定這將始終從列表的開始。 – Derek
如果'rnd.Next(list.Count)'返回* zero *會怎麼樣?可能,* emply列表*不是所需的輸出。 –
利用Random類的,並利用其返回非負數低於指定限度NEXT功能...
List<Product> products = productRepo.GetProduct().ToList();
var randomProduct=new Random();
var index=randomProduct.Next(products.Count);
return PartialView(products[index]);
希望這可以幫助你.. 編碼愉快
我建議選擇了隨機索引,然後返回相應的項目:
// Simplest, not thread-safe
private static Random s_Random = new Random();
private static List<Product> PartialView(List<Product> products, int count = 6) {
// Too few items: return entire list
if (count >= products.Count)
return products.ToList(); // Let's return a copy, not list itself
HashSet<int> taken = new HashSet<int>();
while (taken.Count < count)
taken.Add(s_Random.Next(count));
List<Product> result = new List<Product>(count);
// OrderBy - in case you want the initial order preserved
foreach (var index in taken.OrderBy(item => item))
result.Add(products[index]);
return result;
}
什麼是少數,2或3或特定的任何數字? –
請詳細說明*一些隨機項*。例如,你允許*重複*嗎? :'列表[3],列表[7],列表[3]'?這些項目是否應該*訂購*:'列表[3],列表[8]'或者列表[8],列表[3]'也可以做到這一點? –
6個項目可以很好,無需重複 – Giacomo