2009-05-13 27 views
15

मुझे यह काम करने का कोई तरीका नहीं मिल रहा है और उम्मीद है कि किसी के पास कोई विचार है। एक सरलीकृत उदाहरण में पूर्णांक 1-100 कहने की सूची होगी, मैं हर 3 पंक्तियों को समूहबद्ध करना चाहता हूं, इसलिए परिणाम पहले समूह में 1,2,3 होगा और फिर अगले समूह में 4,5,6 होगा। मुझे पता है कि कैसे प्रत्येक एनएच रिकॉर्ड प्राप्त करें, लेकिन मुझे जो चाहिए वह सभी रिकॉर्ड है, इसलिए मैं उन्हें पहले, आखिरी, योग, अधिकतम इत्यादि का उपयोग करके एकत्र कर सकता हूं।पंक्तियों की प्रत्येक एन संख्या को समूहबद्ध करने के लिए लिंक का उपयोग कैसे करें

धन्यवाद!

+0

संभव [LINQ के साथ उप-सूचियां में विभाजित सूची] की डुप्लीकेट (http://stackoverflow.com/questions/419019/split-list-into-sublists-with-linq) – nawfal

उत्तर

22
var q = Enumerable.Range(0, 100).GroupBy(x => x/3); 

क्या मुझे कुछ याद आ रही है?

+2

नहीं, लेकिन मैं स्पष्ट रूप से कर रहा हूँ। मुझे और सोना है। बहुत धन्यवाद!!! – RBear

+0

पेडेंटिक होने के नाते - संख्यात्मक। श्रेणी (1, 100) क्योंकि वह 1 से शुरू करना चाहता था। –

+0

यदि पहला नंबर 0 है, तो यह ठीक काम करता है। लेकिन यदि पहला नंबर 1 है, तो पहले समूह में एक कम तत्व होता है। उदाहरण के लिए {0,1,2}, {3,4,5}, लेकिन {1,2}, {3,4,5}। इसे कैसे ठीक करें? –

29

यह उदाहरण गैर-संख्यात्मक संग्रहों की क्वेरी करने के लिए काम करना चाहिए। यह समूह में समूह के लिए एक सूचकांक को प्रोजेक्ट करता है, और उसके बाद समूहकरण के दौरान इसे फिर से हटा देता है।

var studentQuery2 = students 
    .Select((student, index) => new {student, index}) 
    .GroupBy(g => g.index/3, i => i.student); 
+0

धन्यवाद भी, लेकिन सूचकांक कहां से आता है? – RBear

+0

मैं उम्मीद कर रहा था कि चयन अपनी अनुक्रमणिका को क्वेरी में पेश करेगा। ऐसा लगता है कि यह नहीं करता है। मैं तदनुसार उदाहरण अपडेट करूंगा - ताकि आप इसे गैर-int आधारित संग्रहों के साथ उपयोग कर सकें। –

+6

एफवाईआई, ढांचे के अगले संस्करण में एक "ज़िप शामिल" एक्सटेंशन विधि होगी। यदि आप पूर्णांक के अनंत अनुक्रम के साथ एक क्वेरी परिणाम ज़िप करते हैं, तो आपको एक अनुक्रमित अनुक्रम मिलता है। विवरण के लिए इस विषय पर मेरा हालिया ब्लॉग आलेख देखें। –

1

कैसे एक सरल दृष्टिकोण के बारे में:

var index = 0; 
var grpOf3s = students.GroupBy(x => index++/3); 

अद्यतन: समूह आइटम के Key मूल्य का उपयोग कर रहे हैं तो आप समूह एक सूची में गणनीय कन्वर्ट करने के लिए की आवश्यकता होगी। अन्यथा आपको हर बार Key एक अलग-अलग प्राप्त होगा।

var index = 0; 
var grpOf3s = students.GroupBy(x => index++/3).ToList(); 
संबंधित मुद्दे

 संबंधित मुद्दे