2011-12-08 51 views
0

我現在有兩個陣列的一個存儲存儲該文件大小的文件名和另一個。我需要顯示最大文件大小和名稱。我可以通過使用此代碼來顯示最大的文件。C#得到數組編號

 long[] fileSize; 
     string[] fileName; 
     fileSize = new long[fileCount]; 
     fileName = new string[fileCount]; 
     for (int index = 0; index < files.Length; index++) 
     { 
      fileSize[index] = files[index].Length; 
      fileName[index] = files[index].Name; 
     } 
     long largestFile = fileSize.Max(); 
     string latestFileName = fileName[fileSize.Max()]; 
     Console.WriteLine("Total size of all files: {0}", totalSize); 
     Console.WriteLine("Largest file: {1}, {0}", largestFile, latestFileName); 

我試過使用谷歌,但它只是告訴我如何制定出最大值或最小值。

+0

是你必須使用陣列的要求? – user1231231412

+0

你需要使用數組嗎?有很多本地.NET集合對象存儲您可以使用的名稱 - 值對。或者爲了獲得最大的靈活性,總是有一個System.Data.Datatable對象。文件的名稱和大小以及其他屬性可以保存在同一行中,並消除這種不必要的複雜性。 – David

+0

沒有我必須使用的要求,我只需要顯示最大的文件的大小和名稱。 – bobthemac

回答

4

有沒有必要在你的files陣列的名稱和大小,只是循環單獨的陣列,並保持當前的最大文件大小的跟蹤和它的名字單獨的變量。事情是這樣的:

int max = 0; 
string name = string.Empty; 

for (int index = 0; index < files.Length; index++) 
{ 
    int size = files[index].Length; 
    //check if this file is the biggest we've seen so far 
    if (size > max) 
    { 
     max = size; //store the size 
     name = files[index].Name; //store the name 
    } 
} 

//here, "name" will be the largest file name, and "max" will be the largest file size. 
4

考慮使用,而不是陣列字典。陣列可能會不同步,這是更難管理

 var info = new Dictionary<string, long>(); 
     info.Add("test.cs", 24); 
     var maxSize = info.Values.Max(); 
     Console.WriteLine(info.Single(p => p.Value == maxSize).Key); 
0

Max返回最大,不是最大值的指數,這就是爲什麼你的索引查找不起作用。你可以試試這個:

long largestSize = -1; 
int largest = -1; 
for (int index = 0; index < files.Length; index++) 
{ 
    fileSize[index] = files[index].Length; 
    fileName[index] = files[index].Name; 

    if(fileSize[index] > largestSize) 
    { 
     largestSize = fileSize[index]; 
     largest = index; 
    } 
} 

或者,正如其他人所指出的,使用的Tuple<string, long>數組,Dictionary<string, int>(文件名是否是唯一的),甚至文件在你面前有類型。

1
 var largestFiles = files.Where((f1) => f1.Length == files.Max((f2) => f2.Length)); 

     // it's possible that there are multiple files that are the same size and are also the largest files. 
     foreach (var file in largestFiles) 
     { 
      Console.WriteLine("{0}: {1}", file.Name, file.Length); 
     }