соответствует частичной строке в списке <string>в другом списке <string> - PullRequest
2 голосов
/ 20 июля 2011

это я. я получил следующий код:

foreach (var str in usedCSS) { 
    if (CSS.Any(c => c.IndexOf(str)>0))        
        Response.Write(str + "<br />"); 
    else        
        Response.Write("Could not find: " + str + "<br />"); 
}

usedCSS = List<string>

CSS = List<string>

но мне нужно наоборот ...

я хочу, чтобы var str in usedCSS было var str in CSS

usedCSS содержит строки только имен css, например: .header

CSS содержит строку фактического css, например: .header {font-size:14px;}

По сути, мне нужно распечатать действующий CSS, который используется. Код, который у меня есть, делает прямо противоположное, он возвращает только имена CSS, не актуальный css.

Ответы [ 4 ]

3 голосов
/ 20 июля 2011

Если я понимаю, что вы пытаетесь сделать правильно, вы можете сделать это.FirstOrDefault() находит первое вхождение совпадения предиката и возвращает его, или null (по умолчанию для типа string), если не найдено.Тогда все, что нам нужно, это строковый метод StartsWith(), чтобы сопоставить каждый элемент в префиксе CSS с рассматриваемым str.

        foreach (var str in usedCSS)
        {
            // FirstOrDefault finds first match or returns default (null for string) if not found.
            var match = CSS.FirstOrDefault(s => s.StartsWith(str));

            if (match != null)

                // get the match.  
                Response.Write(match + "<br />");
            }
            else
            {
                Response.Write("Could not find: " + str + "<br />");
            }
        }

ps. Вышеприведенное работает, если вы ожидаете только одно или нет совпаденийесли у вас может быть несколько совпадений, и вы хотите их всех:

foreach (var str in usedCSS)
{
    foreach(var match in CSS.Where(s => s.StartsWith(str)))
    {
        // get the match.  
        Response.Write(match + "<br />");
    }
}
1 голос
/ 20 июля 2011

Попробуйте

var R = (from str in CSS from x in usedCSS where str.StartsWith (x) select str).ToList();
foreach ( var V in R )
{
    Response.Write ( V.ToString() + "<br />");
} 
0 голосов
/ 20 июля 2011

Вот более «заархивированное» решение:

List<string> list = css.Where(c => usedCss.Any(c.Contains)).ToList();

Вы можете проверить, используя этот тестовый код:

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

namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            List<string> css = new List<string>
            {
                ".header {font-size:14px;}",
                ".foo {dfsfd}",
                ".foobar",
                ".wefw"
            };

            List<string> usedCss = new List<string>
            {
                ".header",
                ".foo",
            };

            List<string> list = css.Where(c => usedCss.Any(c.Contains)).ToList();

            if (list.Count > 0)
            {
                Console.WriteLine("Has found in:");
                list.ForEach(Console.WriteLine);
            }
            else
            {
                usedCss.ForEach(x => Console.WriteLine("Could not find: " + x));
            }

            Console.ReadKey();
        }
    }
}

Обратите внимание, что такой код не может отличить '.foo' от '.foobar'. В общем случае, если он измеряет, вы должны использовать более сложную проверку с регулярными выражениями.

0 голосов
/ 20 июля 2011
        List<string> result = CSS.Where(a => usedCSS.Any(b => b.IndexOf(a) >= 0)).ToList();
        result.ForEach(a => Console.WriteLine(a));

и наоборот

        List<string> result = usedCSS.Where(a => CSS.Any(b => a.IndexOf(b) >= 0)).ToList();
        result.ForEach(a => Console.WriteLine(a));

Пример кода ...

        List<string> CSS = new List<string>() { "hello", "goodbye" };
        List<string> usedCSS = new List<string>() { "hello darlin", "when are you available", "hello chief", "what", "when to say goodbye" };
        List<string> result = usedCSS.Where(a => CSS.Any(b => a.IndexOf(b) >= 0)).ToList();
        result.ForEach(a => Console.WriteLine(a));
        Console.ReadLine();

результат:

hello darlin 
hello chief 
when to say goodbye

или

        List<string> CSS = new List<string>() { "hello", "goodbye" };
        List<string> usedCSS = new List<string>() { "hello darlin", "when are you available", "hello chief", "what" };
        List<string> result = CSS.Where(a => usedCSS.Any(b => b.IndexOf(a) >= 0)).ToList();
        result.ForEach(a => Console.WriteLine(a));
        Console.ReadLine();

результат:

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