Как сохранить оставшиеся элементы из списка в стек? - PullRequest
0 голосов
/ 30 апреля 2019

Кто-нибудь знает, как сохранить оставшиеся элементы из List lst в стек Stack?

Я пробовал если (! New_list.Contains), но он показал ошибку, я знаю, что я определенно что-то упускаю или просто делаю не то. Я новичок в C #, извините, если это тупой вопрос

List<int> lst = new List<int>();

Random rnd = new Random();

for (int i = 0; i < 10; i++)
{
    lst.Add(rnd.Next(1, 20));
}

List<int> new_lst = lst.FindAll(x => x >= 7 && x <= 12);

Console.WriteLine("");
foreach (int a in new_lst)
{
    Console.Write($"{a} "); 
}

Stack<int> st = new Stack<int>();

foreach (int a in lst)
{
    if ("code")
    {
         adding remaining elements (that didn't go to new_lst) from lst to st
    }
}

Я ожидаю, что числа больше 12 и меньше 7

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

Вы можете добавить условие в свой список lst, чтобы отфильтровать элементы, содержащиеся в new_lst:

foreach (int a in lst.Where(item => !new_lst.Contains(item)))
{
    st.Push(a);
}

При этом было бы быстрее итерировать элементы один раз и добавлять их как в полный список, так и в новый список или в стек (в зависимости от значения):

Random rnd = new Random();

List<int> lst = new List<int>();
List<int> new_lst = new List<int>();
Stack<int> st = new Stack<int>();

for (int i = 0; i < 10; i++)
{
    var thisItem = rnd.Next(1, 20);

    lst.Add(thisItem);

    if (thisItem >= 7 && thisItem <= 12)
    {
        new_lst.Add(thisItem);
    }
    else
    {
        st.Push(thisItem);
    }
}
1 голос
/ 30 апреля 2019

Самый простой способ - просто добавить элементы к тому или иному при ходьбе по списку:

foreach (int x in lst)
{
    if (x >= 7 && x <= 12)
         new_lst.add(x);
    else
         st.Push(a);

}

Если вы хотите пройти более сложный маршрут, я бы сохранял условие и выбирал элементы для списка / стекас противоположным условием:

   Func<int,bool> filter = x => x >= 7 && x <= 12;
   var new_lst = lst.Where(filter).ToList();
   var st = new Stack<int>(lst.Where(x=> !filter(x));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...