Как отсортировать один список на основе другого?

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
Предположим у нас есть первый список

Купить игрушку
игрушку купить в москве
заказать игрушку
купить игрушку в питере
отзывы о игрушке
заказать отзыв о игрушке
игрушка заказ
Есть второй список
Заказать
купить
отзыв
Нам надо первый список привести в порядок на основе второго. Получится должно следующее
заказать игрушку
заказать отзыв о игрушке
игрушка заказ
Купить игрушку
игрушку купить в москве
купить игрушку в питере
отзывы о игрушке
заказать отзыв о игрушке
Комрады помогите пожалуйста. Весь уже ушатался.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Предположим у нас есть первый список

Купить игрушку


Есть второй список


Нам надо первый список привести в порядок на основе второго. Получится должно следующее


Комрады помогите пожалуйста. Весь уже ушатался.
как вариант, брать строки из списка с вхождением неизменяемой части слова (вхождение проверять регуляркой и IF) и складывать в результирующий список..
операцию повторять для всех ключевых слов (средний список)..
в результирующем списке строки будут именно в том порядке, как заданы слова для сортировки..

получится конечно довольно громоздкая и медленная конструкция, C# снипет может кто то напишет, будет лучше.. :-)
 

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
У меня получился вот такой код

Код:
IZennoList clastered = project.Lists["clastered"];
IZennoList readyClatered = project.Lists["readyClatered"];


//

   
for(int i=for_claster.Count-1; i>=0; i--)
{   


        if (clastered.Contains(for_claster[i])) readyClatered.Add(for_claster[i]);
       
   
}
но он все складывает в одну кучу.
 

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Вот только сегодня с такой же проблемой столкнулся, думал в понедельник для себя сделаю, но тут такой крик души! )))))
Лови код и архив с твоими списками...

Код:
var listA = project.Lists["cache1"];     // Исходный список
var listB = project.Lists["cache2"];     // Стоп-слова
var Result = project.Lists["Result"];     // Результат сортировки

lock (SyncObjects.ListSyncer) {
    for (int i=0; i<listB.Count; i++) {
        var parserRegex = new Regex("(?i)"+listB[i]);
        for (int t=0; t<listA.Count; t++) {
            if (parserRegex.IsMatch(listA[t])) {
                Result.Add(listA[t]);
                listA.RemoveAt(t);
                t--;
            }
        }
    }
}
Добавлено: using System.Text.RegularExpressions;
Это для того чтобы искать совпадения регуляркой, тогда регистр слов значения не имеет.
Удачи!
 

Вложения

  • 12,2 КБ Просмотры: 2

justanotherVar

Пользователь
Регистрация
18.09.2016
Сообщения
66
Благодарностей
2
Баллы
8
Вот только сегодня с такой же проблемой столкнулся, думал в понедельник для себя сделаю, но тут такой крик души! )))))
Лови код и архив с твоими списками...

Код:
var listA = project.Lists["cache1"];     // Исходный список
var listB = project.Lists["cache2"];     // Стоп-слова
var Result = project.Lists["Result"];     // Результат сортировки

lock (SyncObjects.ListSyncer) {
    for (int i=0; i<listB.Count; i++) {
        var parserRegex = new Regex("(?i)"+listB[i]);
        for (int t=0; t<listA.Count; t++) {
            if (parserRegex.IsMatch(listA[t])) {
                Result.Add(listA[t]);
                listA.RemoveAt(t);
                t--;
            }
        }
    }
}
Добавлено: using System.Text.RegularExpressions;
Это для того чтобы искать совпадения регуляркой, тогда регистр слов значения не имеет.
Удачи!
Всё оказалось ещё проще.
PHP:
IZennoList for_claster = project.Lists["for_claster"];
IZennoList clastered = project.Lists["clastered"];
IZennoList readyClatered = project.Lists["readyClatered"];

foreach (var cl in clastered){
foreach (var for_cl in for_claster){
  if (for_cl.Contains(cl)){
   readyClatered.Add(for_cl);
  }
}
}
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)