Как просмотреть список строковых элементов и вставить еще один строковый элемент (ы) на основе определенных условий? - PullRequest
0 голосов
/ 25 октября 2019

Допустим, у меня есть список элементов String в списке, таких как: «Яблоко», «Абрикос», «Банан», «Черника», «Рис», «Виноград» ...

КакВы видите, что у нас есть несколько предметов A, несколько предметов B, затем мы пропускаем CD и E, прежде чем вернуться к предметам F и G. Мне нужна помощь, чтобы выяснить, как пройти этот список и вставить «А» перед элементами «А», затем «В» перед элементами «В» и т. Д. ... но важная часть, несмотря на отсутствие C, Dили E-элементы, которые мне все еще нужны, чтобы в них были вставлены буквы "C", "D" и "E"? Поэтому при выводе на экран это будет выглядеть примерно так ...

  • "A"
  • "Яблоко"
  • "Абрикос"
  • "B"
  • "Банан"
  • "Черника"
  • "C"
  • "D"
  • "E"
  • "F"
  • "Рис"
  • "G"
  • "Виноград"

Есть ли способсделать это с ванильным C #?

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Я уверен, что это можно сделать и другими лучшими способами, но самый простой из них -


List<string> prods = new List<string>();

            prods.AddRange(new List<string>() {
                "Apple",
                "Apricot",
                "Banana",
                "Blueberry",
                "Fig",
                "Grape"
            });

            //Considering that the list is already sorted alphabetically
            //or you can use prods.Sort();
            List<string> newList = new List<string>();

             string alphabets = "abcdefghijklmnopqrstuvwxyz";
            foreach(char a in alphabets)
            {
                newList.Add(a.ToString());
                foreach (var item in prods)
                {
                    if (item.StartsWith(a.ToString()) || item.StartsWith(a.ToString().ToUpper()))
                    {
                        Console.WriteLine($"adding {item} to  newlist");
                        newList.Add(item);
                    }
                }
            }
            foreach (var item in newList)
            {
                Console.WriteLine(item);
            }


            Console.ReadKey();

Пожалуйста, дайте мне знать, как это работает для вас.

0 голосов
/ 26 октября 2019

Хорошо, это кажется действительно простым.

var yourList = new List<string>() { 
    "Apple", "Apricot", "Banana", "Blueberry", "Fig", "Grape"
};

yourList
  .AddRange("ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray().Select(x => x.ToString()).ToList());

yourList.Sort();

0 голосов
/ 25 октября 2019

Вот как я бы это сделал:

string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
List<string> listOfWords = new List<string>
{
    "Appricot",
    "Apple",
    ...
};

foreach (string letter in letters)
{
    Console.WriteLine(letter);
    List<string> words = listOfWords.Where(word => word[0].ToUpper().Eqauls(letter)).ToList();
    words.ForEach(word => Console.WriteLine(word));
}

Это перебирает все буквы в letters и выводит их на консоль.

Затем получаются все словав listOfWords, где они начинаются с буквы и распечатывают их.

Надеюсь, это поможет:)

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