Сравнение строки IEnumerable со строкой SortedList, строкой

Я столкнулся с проблемой, которую не могу решить. :-) Мне нужно найти все значения, которые содержат определенную подстроку, тогда я должен вернуть пару ключ-значение. Мне пришлось реализовать систему, в которой я должен был создать 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>();

Любое предложение будет оценено. Заранее спасибо!


person user3474335    schedule 31.03.2014    source источник
comment
Итак, вы хотите найти все альбомы, содержащие определенную строку, а затем отсортировать их? В чем ключ?   -  person JonE    schedule 31.03.2014
comment
Спасибо за ваш ответ! Ключ - это имя строка   -  person user3474335    schedule 31.03.2014
comment
имя строки = textBox1.Text;   -  person user3474335    schedule 31.03.2014
comment
В основном имя исполнителя или группы. Потому что мне нужно найти исполнителя или группу, используя подстроку через альбомы.   -  person user3474335    schedule 31.03.2014


Ответы (2)


Когда вы перечисляете 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>< /а>.

person Jim Mischel    schedule 31.03.2014
comment
Большое спасибо! Это решило проблему. :-) Еще раз спасибо! - person user3474335; 31.03.2014

    [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
  • переименование Albname в AlbumName
person Michal Ciechan    schedule 31.03.2014