Просмотрите список пользовательских типов и верните первый объект, где определенный член начинается с буквы "x". - PullRequest
0 голосов
/ 19 ноября 2018

это должно быть легко, но я еще не совсем понял:

У меня есть список моего пользовательского типа Mp3ObjectSmall. В основном это список, содержащий mp3-файлы с URI на телефоне, исполнителя и название песни. Это тип:

public class MP3objectSmall
{
    public string SongName { get; set; }
    public string ArtistName { get; set; }
    public string Mp3Uri { get; set; }
}

Этот список содержит около 700 наименований, каждый из которых имеет свою песню.

Теперь, для моего представления переработчика, мне нужно иметь возможность, например, нажать на букву «x» в моем приложении, а затем иметь функцию, возвращающую int с первым элементом в списке выше, содержащим «x» в качестве песни имя.

Даже если бы я произнес 100 названий песен, которые начинаются с буквы «х», мне нужно просто вернуть позицию первого элемента.

Как найти первую строку члена списка пользовательских типов, которая начинается с определенной буквы?

Если что-то неясно, просто прокомментируйте это!

Спасибо: -)

Что я пробовал до сих пор:

        if (letter != "0") // scroll to top when it is 0, so nothing needs to be done here 
        {
            foreach(MP3objectSmall o in Mp3ObjectSmall)
            {
                if (letter.Equals(o.SongName.StartsWith(letter)))
                {

                }

            }
        }

Ответы [ 4 ]

0 голосов
/ 19 ноября 2018

Другое решение: https://dotnetfiddle.net/RzH5li

public static void Main()
{

    List<MP3objectSmall> songs = new List<MP3objectSmall>();

    songs.Add(new MP3objectSmall(){SongName ="a"});
    songs.Add(new MP3objectSmall(){SongName ="b"});
    songs.Add(new MP3objectSmall(){SongName ="x"});
    songs.Add(new MP3objectSmall(){SongName ="z"});

    string letter = "x";

    MP3objectSmall  firstSong = songs.FirstOrDefault(x => x.SongName.ToLowerInvariant().StartsWith(letter));

    if(firstSong != null)
    {
        int index = songs.IndexOf(firstSong);
        Console.WriteLine(index);
    }
}
0 голосов
/ 19 ноября 2018

Я думаю, что вам не хватает самой переменной List<>.

Например, предположим, что у вас есть похожий код:

var songList = /* some function returning a List object like: List<MP3objectSmall> */;

Затем вы можете выполнить некоторую фильтрацию списка:

int desiredIndex = songList.FindIndex(file => file.SongName.StartWith(letter));

Ваш индекс находится в переменной desiredIndex

0 голосов
/ 19 ноября 2018

Я думаю, что вы ищете FindIndex:

var indexOfFirstSongThatStartsWithX = Mp3ObjectSmall
    .FindIndex(s => s.SongName.StartsWith("x"));

Это вернет индекс первого элемента в списке, где свойство SongName начинается с x.

Если вы хотите сам элемент, вы можете использовать Find таким же образом:

var firstSongThatStartsWithX = Mp3ObjectSmall
    .Find(s => s.SongName.StartsWith("x"));

Это вернет первый элемент, где свойство SongName начинается с x.

0 голосов
/ 19 ноября 2018

Использование Linq .Простой пример для вашего случая.

Также, отметьте Лямбда-выражения

var list = new List<MP3objectSmall>();
var s1 = new MP3objectSmall { SongName = "abc" };
var s2 = new MP3objectSmall { SongName = "def" };
var s3 = new MP3objectSmall { SongName = "xyz" };
var s4 = new MP3objectSmall { SongName = "xxx" };

list.Add(s1);
list.Add(s2);
list.Add(s3);
list.Add(s4);

var filteredList = list.Where(i => i.SongName.StartsWith("x")).ToList();

foreach(var item in filteredList)
{
    Console.WriteLine(item.SongName);
}
  • list.Where, чтобы отфильтровать список на основе предоставленного условия
  • i => i.SongName - это лямбда-выражение, которое позволяет получить доступ к свойствам объекта.
  • StartsWith предоставляет способ найти / отфильтровать строку, начинающуюся с указанного символа

Не забудьте импортировать эти пространства имен

using System.Collections.Generic;
using System.Linq;

Кроме того, используйте FirstOrDefault , поскольку вопрос заключается в том, чтобы получить первый элемент после фильтров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...