2016-10-10 4 views
3

Ich versuche, ein Array auf ein anderes zu kopieren, das nur kopiert, was eindeutig ist. Ich hatte dies funktioniert, bevor ich ein Multidim-Array machte. Jetzt, wenn ich den folgenden Code ausführe, kopiert er einfach das ursprüngliche Array in das zweite Array. Ich muss sie auch in einem Array-Format behalten, wenn ich die Daten später auf einer Webseite ausgabe. Was mache ich falsch oder kann ich das nicht mit Multidim machen?Kopiere nur distinct in das zweite Array

string[][] array; 
string[][] array2; 
array2 = array.Distinct().ToArray(); 

Nach der Buchung kann ich meine file.readalllines bearbeiten, um nicht die gleichen Zeilen zu lesen? Der Code ist unten und die Tabelle wird als Array zurückgegeben.

string[][] table = File.ReadAllLines(@path) 
         .Select(line => line.Split(';')) 
         .ToArray(); 
+2

Wenn Sie sagen, nicht funktioniert, was meinst du? Und wenn Sie 'Distinct()' machen wollen, wollen Sie, dass jedes innere Array nur bestimmte Werte hat? Es ist gut, einige Eingaben und erwartete Daten zu zeigen. –

+4

'Distinct' ist nicht für mehrdimensionale Arrays definiert. – Pikoh

+3

Stellen Sie sich vor, Sie haben 'array == {" a "," b "," a "," d "}, {" a "," b "," c "," b "}' '; Was ist die erwartete Antwort? –

Antwort

3

Aus Gründen der Einfachheit. Warum nicht verwenden (gilt für Zeilenebene):

string[][] table = File.ReadAllLines(@path) 
        .Distinct() 
        .Select(line => line.Split(';')) 
        .ToArray(); 

Die Annahme ist hier, dass gleiche Zeilen zum selben Array führen. Das heißt, die Reihenfolge ist eine Komponente in der Definition der Gleichheit zweier verschiedener Zeilen.

+0

Das habe ich falsch gemacht. Ich hatte das Gefühl, ich könnte es lesen und versuchte so etwas zuvor. Mein Problem war ich versuchte .Distinct(). ToArray(); in der letzten Zeile. Vielen Dank. –

+0

Wenn Sie denken, dass es darum geht, unterschiedliche Werte in CSV-ähnlicher Form zu erhalten, würde dies wahrscheinlich fehlschlagen. Zwei Zeilen können genau die gleichen Daten haben, mit Ausnahme des nachfolgenden Leerzeichen für eine < field >. –

+0

@ CetinBasoz - Sie haben absolut Recht. Deshalb habe ich die Annahme in die Antwort aufgenommen. –

1

(ich glaube, mein Kommentar war gar nicht verstanden, so eine Antwort Zugabe)

Betrachten Sie Ihre Textdatei wie dies (c: \ temp \ myfile.txt):

1; Name1; 100 
1; Name1;100 
1 ;Name1;100 
11; Name1; 100 
2;Name2;20 

Dann Sie können eindeutige Zeilen mit einem Code wie bekommen:

void Main() 
{ 
    int custId; 
    decimal amount; 
    var content = 
     File.ReadAllLines(@"c:\temp\myFile.txt") 
     .Select(f => f.Split(';')) 
     .Select(f => new 
     { 
      CustomerID = int.TryParse(f[0], out custId) ? custId : -1, 
      Company = f[1].Trim(), 
      Amount = Decimal.TryParse(f[2], out amount) ? amount : 0M 
     }) 
     .Where(f => f.CustomerID != -1) 
     .Distinct(); 

    foreach (var c in content) 
    { 
     Console.WriteLine("CustomerID:{0}, Company:{1}, Amount:{2}", c.CustomerID, c.Company, c.Amount); 
    } 
} 
Verwandte Themen