मिल मैं निम्नलिखित कोड है:सी # foreach केवल विशिष्ट मानों
foreach (Logs log in _logsDutyStatusChange)
{
string driverid = log.did;
}
कैसे मैं केवल driverid स्ट्रिंग के लिए अलग चालक आईडी जोड़ना होगा?
धन्यवाद
मिल मैं निम्नलिखित कोड है:सी # foreach केवल विशिष्ट मानों
foreach (Logs log in _logsDutyStatusChange)
{
string driverid = log.did;
}
कैसे मैं केवल driverid स्ट्रिंग के लिए अलग चालक आईडी जोड़ना होगा?
धन्यवाद
आपका कोड अभी कुछ भी नहीं जोड़ रहा है, यह केवल प्रत्येक स्ट्रिंग को एक स्ट्रिंग (लूप के दायरे में घोषित) सेट कर रहा है। अंतिम परिणाम केवल अंतिम मूल्य होगा, और यह वैसे भी निम्नलिखित कोड के दायरे से बाहर होगा। इसके बजाय _logsDutyStatusChange foreach'ing की
string driverids = string.Join(",", _logsDutyStatusChange
.Select(item=>item.did)
.Distinct()
.ToArray());
सबसे पहले, एक comparer वर्ग बना सकते हैं और इंटरफ़ेस को लागू:
public class LogComparer : IEqualityComparer<Log>
{
public bool Equals(Log one, Log two)
{
return one.did.Equals(two.did);
}
public int GetHashCode(Log log)
{
return log.did.GetHashCode();
}
}
और फिर Enumerable.Distinct()
विधि का अधिभार कि समानता comparer का एक उदाहरण ले जाता है का उपयोग करें:
foreach(var log in _logsDutyStatusChange.Distinct(new LogComparer()))
{
// Work with each distinct log here
}
mhh ... शायद IEnumerable<T>
का Distinct()
फ़ंक्शन का उपयोग करें?
आप क्या करना चाहिए:
foreach (string id in _logsDutyStatusChange.Select(x=>x.did).Distinct())
{
string driverid = id;
}
'डिस्टिंट' के बाद 'अंतिम' का उपयोग भी कर सकता है और 'foreach' – juharr
@juharr से गुजर सकता है: मुझे लगता है कि लूप बॉडी के भीतर केवल एक परिवर्तनीय घोषणा के मुकाबले वास्तव में अधिक कोड है। –
ठीक है, मुझे यकीन नहीं था कि वह लूप में आईडी के साथ कुछ और कर रहा है, क्योंकि मुझे लगता है कि यह सिर्फ एक नमूना है जिसे उसने पोस्ट किया था। – Andrei
आप अलग अपने लॉग्स वर्ग IEquatable
अन्यथा लागू करता है, तो उपयोग कर सकते हैं, एक त्वरित 'hacky' ठीक तरह कुछ का उपयोग किया जा सकता है
foreach (var group in _logsDutyStatusChange.GroupBy(l => new { log.did, .... more identifying fields })
{
string driverid = group.Key.did;
}
सी # 4.0 टुपल्स में 'automagic' की तुलना/समीकरण
, आप LINQ का उपयोग उन के माध्यम से अलग का एक संग्रह और पाश पाने के लिए कर सकते हैं: आप उन सभी को एक स्ट्रिंग, अल्पविराम के द्वारा अलग है, जैसे को संलग्न करने की कोशिश कर रहे हैं, यह कोशिश , इसके बजाय:
foreach (Logs log in _logsDutyStatusChange.Select(l => l.did).Distinct())
{
//Handling code here
}
कार्यान्वयन परिणाम के साथ आप जो करना चाहते हैं उस पर बिल्कुल निर्भर करेगा।
HashSet<string> SeenIDs = new HashSet<string>();
foreach (Logs log in _logsDutyStatusChange)
{
if (SeenIDs.Contains(log.did)) break;
SeenIDs.Add(log.did);
string driverid = log.did;
}
Distinct()
काफी, यहाँ काम नहीं करता, क्योंकि यह केवल आप अलग did
रों मिल जाएगा:
यहाँ एक तरीका है।
यह (LINQ) के बिना काम करना चाहिए:
Hashset<string> alreadyEncountered = new Hashset<string>();
foreach (Logs log in _logsDutyStatusChange)
{
if(alreadyEncountered.Contains(log.did))
{
continue;
}
string driverid = log.did;
alreadyEncountered.Add(driverid);
}
+1, लेकिन अगर ओपी Linq पता नहीं है एक उदाहरण के लिए उपयोगी होगा;) –
ठीक है ... ऐसा लगता है वहाँ पर कुछ उदाहरण हैं कि यह पृष्ठ;) – DarkSquirrel42