2014-03-31 139 views
0

我遇到了一個我無法解決的問題。 :-)我必須找到所有包含特定子字符串的值,然後我必須找回密鑰和值對。我不得不實施一個系統,我不得不做出一個排序列表,其中的歌曲是一類字符串是當然的關鍵比較IEnumerable字符串和SortedList字符串,字符串

Albums alb = new Albums(); 
SortedList<string, Albums> list1 = new SortedList<string, Albums>(); 

專輯類看起來是這樣的:

public class Albums : IComparable 
{ 
    public string albname; 
    public string name1; 
    public string releasedate; 
    public Guid albumID; 

    public Albums() 
    { 
     albumID = new Guid(); 
    } 



    public override string ToString() 
    { 
     return "Album: " + Albname + "\t" + Releasedate; 
    } 

    public Albums(string albname, string releasedate) 
    { 

     this.albname = albname; 
     this.releasedate = releasedate; 
    } 

    public string Name1 
    { 
     get { return name1; } 
     set { name1 = value; } 
    } 

    public string Albname 
    { 
     get { return albname; } 
     set { albname = value; } 
    } 
    public string Releasedate 
    { 
     get { return releasedate; } 
     set { releasedate = value; } 
    } 
    public int CompareTo(object obj) 
    { 
     if (obj is Albums) 
     { 
      Albums other = (Albums)obj; 
      return albname.CompareTo(other.albname); 
     } 
     if (obj is string) 
     { 
      string other = (string)obj; 
      return releasedate.CompareTo(releasedate); 
     } 


     else 
     { 
      return -999; 
     } 
    } 
    } 

我想什麼最後,我把相冊變成一個LinkedList:

LinkedList<string> albm1 = new LinkedList<string>(); 

我還是設法找到所有包含使用IEnumerable的子串的專輯:

string albsearch = textBox16.Text; 
IEnumerable<string> result = albm1.Where(s => s.Contains(albsearch)); 

但我不知道如何比較結果與SortedList的值。我也嘗試創建一個新的SortedList,其中包含字符串中的相冊:

SortedList<string, string> list2 = new SortedList<string, string>(); 

任何建議,將不勝感激。提前致謝!

+1

所以你想找到包含某個字符串的所有專輯 - 然後對它們進行排序?關鍵是什麼? – JonE

+0

謝謝你的回覆!關鍵是一個名字字符串 – user3474335

+0

string name = textBox1.Text; – user3474335

回答

0
[Test] 
    public void Allbum_Search_Test() 
    { 
     var searchText = "TestA"; 
     var list1 = new SortedList<string, Albums> 
     { 
      {"TestAlbum1", new Albums("TestAlbum1","SomeDate")}, 
      {"TestAlbum2", new Albums("TestAlbum2","SomeDate")}, 
      {"OtherAlbum2", new Albums("OtherAlbum","SomeDate")} 
     }; 

     var results = list1.Where(pair => pair.Key.Contains(searchText)); 

     Assert.That(results.Count(), Is.EqualTo(2)); 
    } 

在另一方面我會強烈建議

  • 使得重命名Albums私人領域
  • Album
  • 改變ReleaseDate類型DateTime
  • 重命名AlbnameAlbumName
1

枚舉SortedList時,枚舉中的每個項都是一個鍵/值對。

我想你想要的是:

Albums alb = new Albums(); 
SortedList<string, Albums> list1 = new SortedList<string, Albums>(); 

var foundItems = list1.Where(item => item.Key.Contains(albsearch)); 

或者,如果你想在Album搜索:

var foundItems = list1.Where(item => item.Value.albname.Contains(albsearch)); 

當然,你可以搜索name1領域,而不是專輯名稱, 如果那是你想要的。

返回的每個項目都是一個鍵/值對。更準確地說,一個KeyValuePair<string, Album>

+0

使用子串來找到藝術家或樂隊非常感謝!它解決了這個問題。 :-) 再次感謝你! – user3474335