2016-03-28 29 views
2

我正在從本地project.it中讀取json文件的結果,返回的結果超過4000.我只想得到隨機數量的結果(在500之間 - 1000)。如何從列表或var中獲取隨機數量的細節#

var finalResultz = finalResults("All","All","All");//step one 

在這裏它返回超過4000 results.then我把這樣的列表放入。

List<Results> searchOne = new List<Results>();//step two 
      foreach(var itms in finalResultz) 
      { 
       searchOne.Add(new Results 
       { 
        resultDestination = returnRegionName(itms.areaDestination), 
        mainImageurl = itms.testingImageUrl 
       }); 
      } 


      ViewBag.requested = searchOne; 

,但我想只有像我說過的結果要調整在步驟一或步驟two.how計數我可以做that.hope你的幫助。

+0

那你究竟在500-1000之間的結果的隨機數是什麼意思?你需要第一個N結果,第2,3,4步分配...? –

+0

是的,這正是我想要的,500-1000之間的結果的隨機數 – bill

+0

可能的重複[從C#中的List 中選擇一個隨機的N個元素](http://stackoverflow.com/questions/48087/select-a -random -n-elements-from-listt-in-c-sharp) –

回答

2

您可以使用Random類和Take()方法來提取N個元素。

// create new instance of random class 
Random rnd = new Random(); 

// get number of elements that will be retrieved from 500 to 1000 
var elementsCount = rnd.Next(500, 1000); 

// order source collection by random numbers and then take N elements: 
var searchOne = finalResultz.OrderBy(x => rnd.Next()).Take(elementsCount); 
+0

工作完成,thanx ... – bill

4

如果你想要隨機計數的結果,你可以只是.Take()隨機數的記錄。首先,你需要一個Random

var random = new Random(); 

如果你想500-1000之間,正好在這個範圍內得到一個隨機值:

var count = random.Next(500, 1001); 

然後你可以從收集的記錄:

var newList = oldList.Take(count).ToList(); 

(當然,你可能希望確保它包含許多記錄第一。)

請注意,這將從集合中獲取第一個 N記錄。因此,爲了從集合中的任意位置處獲取隨機記錄,您需要在採集記錄之前對集合進行隨機播放(隨機化)。有很多方法可以做到這一點。一種可能不是絕對最快的方法,但爲了簡單起見,通常「足夠快」是僅僅通過GUID進行排序。因此,像這樣:

var newList = oldList.OrderBy(x => Guid.NewGuid()).Take(count).ToList(); 

或許再次使用隨機數發生器:

var newList = oldList.OrderBy(x => random.Next()).Take(count).ToList(); 
+0

thanx爲您的答案 – bill

相關問題