मेरे पास एक आईनेमरेबल है और मैं प्रत्येक एनएच तत्व युक्त एक नया आईनेमरेबल प्राप्त करना चाहता हूं।सूची में हर दूसरी ऑब्जेक्ट लें
क्या यह लिंक में किया जा सकता है?
मेरे पास एक आईनेमरेबल है और मैं प्रत्येक एनएच तत्व युक्त एक नया आईनेमरेबल प्राप्त करना चाहता हूं।सूची में हर दूसरी ऑब्जेक्ट लें
क्या यह लिंक में किया जा सकता है?
बस इसे अपने आप को लगा बाहर ...
IEnumerable<T>.Where()
विधि एक अधिभार है कि वर्तमान तत्व के सूचकांक लेता है - बस क्या डॉक्टर का आदेश दिया।
(new []{1,2,3,4,5}).Where((elem, idx) => idx % 2 == 0);
यह वापसी होगी
{1, 3, 5}
अद्यतन: आदेश दोनों मेरे उपयोग के मामले और दान ताओ के सुझाव को कवर करने के लिए, के भी स्पष्ट करने देते हैं क्या पहले लौट आए तत्व होना चाहिए:
var firstIdx = 1;
var takeEvery = 2;
var list = new []{1,2,3,4,5};
var newList = list
.Skip(firstIdx)
.Where((elem, idx) => idx % takeEvery == 0);
...
{2, 4}
Cristi's suggestion को लागू करने के लिए:
public static IEnumerable<T> Sample<T>(this IEnumerable<T> source, int interval)
{
// null check, out of range check go here
return source.Where((value, index) => (index + 1) % interval == 0);
}
उपयोग:
var upToTen = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evens = upToTen.Sample(2);
var multiplesOfThree = upToTen.Sample(3);
आप सरणी को भी छोड़ सकते हैं और 'एन्यूमेरेबल। रेंज (1,10)' का उपयोग कर सकते हैं। –
@ एंथनी: यह सिर्फ एक उदाहरण है, जिसका उद्देश्य तत्काल समझ के लिए है। मुझे पता है कि कुछ डेवलपर्स को 'एन्यूमेरेबल। रेंज' देखना होगा। –
आप भी yield
साथ एक विस्तार विधि बना सकते हैं LINQ नहीं है।
public static IEnumerable<T> EverySecondObject<T>(this IEnumerable<T> list)
{
using (var enumerator = list.GetEnumerator())
{
while (true)
{
if (!enumerator.MoveNext())
yield break;
if (enumerator.MoveNext())
yield return enumerator.Current;
else
yield break;
}
}
}
लपेटें कि 'उपयोग' में! ('IENumerable' विरासत' IDISposable'।) –
@Dan: आपका मतलब IENumerator है। मैं पहले कभी यह कैसे महसूस नहीं किया? <कुछ पुराने कोड /> –
के माध्यम से खुदाई हां, मेरा मतलब था 'आईन्यूमेरेटर'। ओह! (किसी कारण से मैं हमेशा एक टाइप करता हूं जब मेरा मतलब दूसरे को टाइप करना होता है। मांसपेशियों की याददाश्त होना चाहिए।) –
पहली बार मैंने संग्रह संग्रह में सूचकांक के लिए वास्तव में ठोस उपयोग देखा है, ब्रावो, मैंने इसे नहीं सोचा होगा। –
आप एक एक्सटेंशन विधि को परिभाषित कर सकते हैं जो इसे देता है। जहां (...) अपने ऐप में यह स्पष्ट करने के लिए। – Douglas
मैं "हर एनएच तत्व" के विवरण से मेल खाने के लिए 'idx + 1' का उपयोग करने का सुझाव दे सकता हूं; कम से कम मेरे लिए, यह सुझाव देता है कि लौटा पहला तत्व एनएच तत्व होना चाहिए। तो '{1,2,3,4,5}' - * * * में हर दूसरे तत्व का अर्थ है '{2,4}' (आपका कोड '{1,3,5}') लौटाता है। शायद यह व्यक्तिपरक है, यद्यपि। –