2016-10-13 19 views
8

Ich möchte List_ID Wertbasis auf List_Position erhalten. Wie soll ich tun? DankWie kann man Einträge in C# mit zwei Listen vergleichen?

List<int> list_ID = new List<int> (new int[ ] { 1, 2, 3, 4, 5 }); 

List<string> list_Position = new List<string> (new string[ ] { A, C, D, B, E}); 

A = 1,

B = 4,

C = 2,

D = 3,

E = 5,

+1

könnten Sie KeyValuePair Liste –

+6

Warum nicht ein wenig versuchen, das Ziel zu erreichen, bevor eine solche Frage zu stellen? –

Antwort

3

Like this :

var letterIndex = list_Position.indexOf(B); 
var listId = (letterIndex + 1 > list_Id.Count) ? -1 : list_Id[letterIndex]; 

//listId==4 
14

Die beste Option für Sie in diesem Moment ist Dictionary Class mit list_Position als Schlüssel und list_Position als Wert, damit Sie Werte basierend auf Position und umgekehrt abrufen können. die Definition wird wie folgt sein:

Dictionary<int, string> customDictionary= 
      new Dictionary<int, string>(); 

customDictionary.Add(1,"A"); 
customDictionary.Add(2,"C"); 
.... 

Wenn Sie Wert entspricht zugreifen möchten o 2 bedeutet, dass Sie

string valueAt2 = customDictionary[2]; // will be "C" 

verwenden können, wenn Sie den Schlüssel bekommen möchten/s auf die spezifischen Wert Mittel entspricht Sie können wie die folgenden verwenden:

var resultItem = customDictionary.FirstOrDefault(x=>x.value=="C"); 
if(resultItem !=null) // FirstOrDefault will returns default value if no match found 
{ 
    int resultID = resultItem.Key; 
} 

Wenn Sie noch mit zwei Listen hinwollen Mittel können Sie diese Example betrachten Was bedeutet, Get Position des erforderlichen Elements aus der list_Position und holen Sie das Element an dieser Position in der liste_ID-Liste, Beachten Sie, list_ID muss größer oder gleich in der Anzahl der Elemente wie die in der list_Position sein. Der Code wird wie folgt sein:

string searchKey="D"; 
int reqPosition=list_Position.IndexOf(searchKey); 
if(reqPosition!=-1) 
{ 
    Console.WriteLine("Corresponding Id is {0}",list_ID[reqPosition]); 
} 
else 
    Console.WriteLine("Not Found"); 
10

Sie können die beiden Listen zip, dann auf der RV-Liste eine Linq-Abfrage tun:

int? id = list_Position.Zip(list_ID, (x, y) => new { pos = x, id = y }) 
         .Where(x => x.pos == "B") 
         .Select(x => x.id) 
         .FirstOrDefault(); 

Der obige Code gibt id = 4.

2

Sie Dictionary<int, string> statt List<int> und List<string> wie diese verwenden:

Dictionary<int, string> yourDic = new Dictionary<int, string>(); 
yourDic.Add(1, "A"); 
// ... and so on 
3

stattdessen zwei getrennte Listen, eine für den Wert und eine für die Position, für ein Wörterbuch entscheiden, wird es Ihr Leben einfacher, da es einen Wert und einen Schlüssel kapseln kann.

Dictionary<int, string> dictionary = new Dictionary<int, string>(); 

dictionary.Add(1, "A"); 
dictionary.Add(2, "B"); 
dictionary.Add(3, "C"); 
dictionary.Add(4, "D"); 
dictionary.Add(5, "E"); 

Einige der Operationen, die Sie auf Ihrem Wörterbuch tun können, kann zum Beispiel sein,:

überprüfen, ob ein Schlüssel oder nicht im Wörterbuch vorhanden ist:

if (dictionary.ContainsKey(1)) 

prüfen, ob ein Wert vorhanden ist oder nicht im Wörterbuch:

if (dictionary.ContainsValue("E")) 

Zugriff auf den Wert, der einen bestimmten Schlüssel hat:

string value = dictionary[1]; 

Schleife über Paare mit foreach:

foreach (KeyValuePair<string, int> pair in dictionary) 
{ 
    Console.WriteLine("{0}, {1}", pair.Key, pair.Value); 
} 

Verwenden Schlüsselwort var Wörterbuch

foreach (var pair in dictionary) 
{ 
    Console.WriteLine("{0}, {1}", pair.Key, pair.Value); 
} 

Shop Schlüssel in einer Liste und Schleife durch die Liste aufzuzählen.

List<string> list = new List<string>(dictionary.Keys); 
foreach (string something in list) 
{ 
    Console.WriteLine("{0}, {1}", something, dictionary[something]); 
} 

entfernen Wert von Wörterbuch

dictionary.Remove("A"); 
Verwandte Themen