मेरे पास List<String>
इस सूची से एक सबलिस्ट लेने की आवश्यकता है। क्या .NET 3.5 में इसके लिए सूची की कोई विधियाँ उपलब्ध हैं?
मेरे पास List<String>
इस सूची से एक सबलिस्ट लेने की आवश्यकता है। क्या .NET 3.5 में इसके लिए सूची की कोई विधियाँ उपलब्ध हैं?
जवाबों:
आप सूची चाहते हैं :: GetRange (firstIndex, count)। Http://msdn.microsoft.com/en-us/library/21k0e39c.aspx देखें
// I have a List called list
List sublist = list.GetRange(5, 5); // (gets elements 5,6,7,8,9)
List anotherSublist = list.GetRange(0, 4); // gets elements 0,1,2,3)
क्या आप उसके बाद हैं?
यदि आप मूल सूची से सबलिस्ट आइटम हटाना चाहते हैं, तो आप ऐसा कर सकते हैं:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
क्या आपकी सूची में LINQ क्वेरी चलाना उतना ही आसान होगा?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
subList
जावा से कुछ इसी तरह की तलाश कर रहा था , जो मूल सूची में एक परिवर्तनशील दृश्य को उजागर करता है। यह अलग तरह से व्यवहार करता है, जो तुरंत स्पष्ट नहीं हो सकता है, इसलिए मैंने सोचा कि जो भी इसे बाद में देखता है, उसके लाभ के लिए इसे इंगित करना उपयोगी होगा। विषय से हटकर, आप योग या ध्यान या कुछ और करना चाहते हैं; आप बिना किसी उकसावे के 0 से रेड-इन-फेस पागल हो गए।
LINQ से कहां क्लॉज का उपयोग करें:
List<object> x = new List<object>();
x.Add("A");
x.Add("B");
x.Add("C");
x.Add("D");
x.Add("B");
var z = x.Where(p => p == "A");
z = x.Where(p => p == "B");
"पी" के ऊपर दिए गए कथनों में वह वस्तु है जो सूची में है। इसलिए यदि आपने डेटा ऑब्जेक्ट का उपयोग किया है, तो:
public class Client
{
public string Name { get; set; }
}
तब आपका linq ऐसा दिखेगा:
List<Client> x = new List<Client>();
x.Add(new Client() { Name = "A" });
x.Add(new Client() { Name = "B" });
x.Add(new Client() { Name = "C" });
x.Add(new Client() { Name = "D" });
x.Add(new Client() { Name = "B" });
var z = x.Where(p => p.Name == "A");
z = x.Where(p => p.Name == "B");
LINQ के साथ:
List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
यदि आपको फ़ॉरच की आवश्यकता है, तो टोलिस्ट की कोई आवश्यकता नहीं है:
foreach (string s in l.Skip(1).Take(2)){}
LINQ का लाभ यह है कि यदि आप कुछ प्रमुख तत्व को छोड़ना चाहते हैं, तो आप यह कर सकते हैं:
List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
यानी गिनती / लंबाई आदि का ध्यान रखने की जरूरत नहीं।
आपके संग्रह वर्ग में एक विधि हो सकती है जो फ़िल्टर को परिभाषित करने के लिए पारित मानदंडों के आधार पर एक संग्रह (एक सबलिस्ट) लौटाती है। फॉर्च लूप के साथ एक नया संग्रह बनाएं और इसे पास करें।
या, विधि और लूप को एक "फ़िल्टर्ड" या "सक्रिय" ध्वज (संपत्ति) सेट करके मौजूदा संग्रह को संशोधित करें। यह काम कर सकता है, लेकिन मल्टीथ्रेडेड कोड में भी poblems पैदा कर सकता है। यदि संग्रह की सामग्री पर अन्य वस्तुएं दिखाई देती हैं तो यह या तो अच्छा है या बुरा है कि आप डेटा का उपयोग कैसे करते हैं।
उप-सूची में आइटम को उल्टा करें
int[] l = {0, 1, 2, 3, 4, 5, 6};
var res = new List<int>();
res.AddRange(l.Where((n, i) => i < 2));
res.AddRange(l.Where((n, i) => i >= 2 && i <= 4).Reverse());
res.AddRange(l.Where((n, i) => i > 4));
0,1,4,3,2,5,6 देता है
Range
पूर्णांक डेटाटाइप के साथ सही है। क्या होगा यदि आपका डेटाटाइप है DataTime
और आपको दो विशिष्ट तिथियों के बीच रिकॉर्ड की एक सूची पुनः प्राप्त करने की आवश्यकता है?