2016-11-27 70 views
1

什麼是從C#中的列表數組中搜索數據的最快方法?在ListArray中搜索C#

我的代碼:

public class fruits 
{ 
    public string Initial; 
    public string Fruit; 
    public fruits(string initials, string names) 
    { 
     Initial = initials; 
     Fruit = names; 
    } 
} 

// load 
List<fruits> List = new List<fruits>(); 

List.Add(new fruits("A", "Apple")); 
List.Add(new fruits("P", "Pineapple")); 
List.Add(new fruits("AP", "Apple Pineapple")); 


//combo box select text 
var text = combobox.SelectText(); 
for (int i=0; i<list.Count(); i++) 
{ 
    if (list[i].Fruit == text) 
    { 
     MessageBox.Show(list[i].Initial); 
    } 
} 

我知道這個搜索方法並不好,如果列表數據中包含太多的數據。

+0

「最快」是什麼意思? :如果您運行代碼,快速開發還是快速? – Fruchtzwerg

+0

@Fruchtzwerg最快≙運行速度最快;最簡單≙最快的代碼。 – devRicher

+0

如果'Initial'在水果中是唯一的;這可能是更好的使用'Dictionary ' – Sehnsucht

回答

2

如果你想要一個 「快」 的解決方案,你應該使用foreach而不是LINQ。該解決方案可以提高你的性能比較了很多:

fruits firstOrDefault = null: 
foreach (fruits f in List) 
{ 
    if (f.Fruit == text) 
    { 
     FirstOrDefault = f; 
     break; 
    } 
} 

你可以得到一些有關職位LINQ性能的更多信息,如

+0

感謝**快速**解決方案。 ;) – devRicher

+0

@devRicher - 感謝「快速」和「簡單」的提示:-) – Fruchtzwerg

+0

感謝您的快速解決方案。 ;) – marshall

1

您可以使用linq

var result = List.FirstOrDefault(q => q.Fruit == text); 
MessageBox.Show(result.Initial); 
+0

謝謝,這是非常簡單的 – marshall

+1

,但不是很快... – Fruchtzwerg

+1

爲什麼問題被標記爲[linq]時,你可以使用linq? – devRicher

0

最好的(和o最好)告訴某種情況最快的方法是用不同的算法對其進行基準測量。你已經在這裏有兩個答案/方法(LINQ和foreach)。他們兩人的時間,然後選擇更快的一個。

換句話說:測量你的代碼使你比那些認爲他們太聰明而無法測量的人更有優勢。 ;)

爲了進一步加快速度,您可能需要考慮保持列表排序,然後在列表中進行二進制搜索。它增加了插入的時間,因爲你必須在插入後排序列表,但它應該加快搜索過程。但是,再說一次:不要只聽我的話,測量它!