2008-10-31 14 views
11

का उपयोग करके यादृच्छिक सरणी मैं एक यादृच्छिक सरणी उत्पन्न करने के लिए Enumerable class in LINQ का उपयोग करने के बारे में एमएसडीएन पत्रिका पर एक लेख पढ़ रहा था। लेख VB.NET का उपयोग करता है और मैं तुरंत यकीन है कि क्या बराबर सी # में है नहीं कर रहा हूँ:LINQ और C#

Dim rnd As New System.Random() 
Dim numbers = Enumerable.Range(1, 100). _ 
    OrderBy(Function() rnd.Next) 

उत्तर

20

Developer Fusion VB.Net to C# converter का कहना है कि बराबर सी # कोड है:

System.Random rnd = new System.Random(); 
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next()); 

भविष्य में संदर्भ के लिए , उनके पास C# to VB.Net converter भी है। इसके लिए several other tools भी उपलब्ध हैं।

+0

सभी के संयोजन के रूप में संपादित किया गया। यह उस समय का सबसे बड़ा जवाब था। मैं इसे साफ नहीं रख रहा हूं, बस इसे साफ रख रहा हूं। – TheSoftwareJedi

+0

ठीक है, मुझे बताने के लिए धन्यवाद। बस संदर्भ के लिए, यह जेम्स Curran का कोड है। – HanClinto

5
Random rnd = new Random(); 
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next()); 
+0

हममम, मैं मुझे मिल रहा है: हमम, मुझे मिल रहा है: विधि 'System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable , System.Func ) 'उपयोग से अनुमानित नहीं किया जा सकता है। प्रकार तर्कों को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें। – Ryan

+0

@Ryan: गायब माता-पिता – Jimmy

1

बेस्ट मैं दृश्य स्टूडियो के लिए उपयोग के बिना मेरे सिर के ऊपर से क्या कर सकते हैं (उंगलियों को पार):

System.Random rnd = New System.Random(); 
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(rnd => rnd.Next); 
5

मैं शुरू में सोचा था कि यह एक बुरा विचार किया जाएगा के बाद से तरह एल्गोरिथ्म कई तुलना करने की आवश्यकता होगी संख्याओं के लिए, और प्रत्येक बार जब वह उस नंबर के लिए लैम्ब्डा को कॉल करता है तो उसे उसी नंबर के लिए एक अलग सॉर्टिंग कुंजी मिल जाएगी। हालांकि, ऐसा लगता है कि यह सूची में प्रत्येक तत्व के लिए केवल एक बार कॉल करता है, और बाद में उपयोग के लिए उस मूल्य को स्टोर करता है। इस कोड को इस दर्शाता है:

int timesCalled = 0; 
Random rnd = new Random(); 

List<int> numbers = Enumerable.Range(1, 100).OrderBy(r => 
    { 
     timesCalled++; 
     return rnd.Next(); 
    } 
).ToList(); 

Assert.AreEqual(timesCalled, 100); 
1

C5 Generic Collection Library का उपयोग करना, तुम सिर्फ builtin Shuffle() विधि इस्तेमाल कर सकते हैं:

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100)); 
numbers.Shuffle(); 
+0

मुझे यह पसंद है। अच्छा लगा। – Ryan

4

क्या कुछ कहीं अधिक आसान के बारे में ...

Enumerable.Range(1, 100).OrderBy(c=> Guid.NewGuid().ToString())