LINQ

2010-06-02 9 views
13

में कॉलम एक IEnumerable<T> और पंक्ति संख्या को देखते हुए सूची, मैं एक IEnumerable<IEnumerable<T>> लिए यह बहुत की तरह परिवर्तित करने के लिए करना चाहते हैं:LINQ

इनपुट:

 
Row Count: 3 

List: [1,2,3,4,5,6,7] 

आउटपुट

 
[ 
[1,4,7] 
[2,5] 
[3,6] 
] 

संपादित करें मैं इसे किसी भी आईनेमरेबल के लिए काम करना चाहता हूं और टी पर इंट 32 पर निर्भर नहीं हूं।

मैं LINQ का उपयोग करके यह कैसे कर सकता हूं?

उत्तर

16

यह यह करना होगा:

var list = new List<object> { 1, "two", 3, 4, 5, 6 ,7 }; 
int count = 3; 
var rows = list.Select((item, index) => new { Item = item, Index = index }) 
      .GroupBy(o => o.Index % count) 
      .Select(g => g.Select(o => o.Item)); 

यह किसी भी Enumerable

+0

क्या यहाँ है? – VoodooChild

+0

@ वूडू चिल्ड: आउटपुट प्रकार 'आईनेमरेबल >' है। – Guffa

+0

yerp यह चाल है, आश्चर्य है कि यह कितना कुशल है, क्या यह सूची में एक से अधिक बार चलता है? –

1

यदि यह आपके बाद है तो यह 3 के समूह को पकड़ लेगा?

Nasty दृष्टिकोण हालांकि :-)

int[] list = new [] {1,2,3,4,5,6,7}; 

    int count = 0; 

    var x = 
     from i in list.Where((c,i)=> i%3==0) 
     let grp = list.Skip(count).Take(3) 
     let temp = (count+=3) 
     select new { 
      grp 
     }; 
0

कुछ इस तरह काम करना चाहिए के लिए काम करना चाहिए।

int[] list = new[] {1,2,3,4,5,6,7}; 
int[] offsets = new[] {0,1,2}; 
int[][] sorted = 
    offsets.Select((offset) => list.TakeWhile((_,ix,_) => ix % 3 == offset)) 

चेतावनी: परीक्षण नहीं किया गया। मैं सी # में प्रोग्राम नहीं करता हूं, लेकिन विचार स्पष्ट होना चाहिए।

2
var src = new List<int> { 2, 4, 8, 16, 23, 42, 101 }; 
var i = 0; 
var answer = src.GroupBy(item => i++ % 3) 
       .Select(item => item.ToArray()) 
       .ToArray(); 

hehe, और यह चाल हम अस्थायी चर से बच सकते हैं, लेकिन कोड के साथ अपठनीय हो:

 var src = new int[] { 4, 8, 15, 16, 23, 42, 101 }; 

     var b = Enumerable.Range(0, src.Length) 
        .Select(index => index) 
        .GroupBy(index => index % 3) 
        .Select(indexes => indexes.Select(index => src[index]).ToArray()) 
        .ToArray(); 
संबंधित मुद्दे