2014-03-31 50 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